Bezpieczeństwo

2012-02-21 16:18:23 Post #1 barcelona

 
Witam, czytałem ostatnio arta pt. Skrypty za "50zł" na przykładzie "demotywatory by lerto.pl" i nabrałem pewnych obaw czy moje metody zabezpieczania konta admin są wystarczająco bezpieczne.
Jestem początkującym programistą i zdaje sobie sprawę że moje wypociny posiadają wiele dziur, przez które można w łatwy sposób włamać się na konto. Dlatego chciałem przedstawić mechanizm jakim kieruje się tworząc strony i liczę że wskażesz mi błędy oraz nakierujesz na właściwe tory.

SQL Injection

Czytałem ostatnio o SQL Injection i staram się w jakimś stopniu filtrować dane pobierane z GET oraz z formularzy.
Robię to przeważnie w taki sposób:
1
$dane mysql_real_escape_string(trim($_POST['dane']));

XSS

W Twoim artykule wspominałeś o XSS. Niestety nigdy nie spotkałem się z tą tematyką i nie mam pojęcia w jaki "prosty" sposób można zabezpieczyć witrynę przed atakiem.

Konto użytkownika i admina

Hasło każdego użytkownika jest zakodowane przez md5 z dodatkową solą. Każdy user w tabeli ma pole "uprawnienia" i jeżeli jest zwykłym userem to ma przypisaną cyferkę np. 18, a admin cyferkę np. 93

Na stronię robię takie warunek dla usera:
1
if ($_SESSION["zalogowany"]=="tak" && $_SESSION["access"]=="18")

A dla admina:
1
if ($_SESSION["zalogowany"]=="tak" && $_SESSION["access"]=="93")

Podejrzewam że tutaj jest największe ryzyko, ale w jaki sposób mogę je zminimalizować to już nie wiem.

To tyle jeśli chodzi o moje bezpieczeństwo. Prosiłbym o jakieś wskazówki, porady.
Pozdrawiam

2012-02-22 09:28:50 Post #2 nospor

 
$dane = mysql_real_escape_string(trim($_POST['dane']);
Dla tekstów ok. Dla liczb nie.
Jeśli dana ma być liczbą to rzutują ją na typ liczbowy:
$dane = (int)$dane;
Dzięki temu nikt ci też świni dla liczb nie podłoży.

XSS
Xss to (w skrócie) włożenie własnego kodu, który coś robi. Najczęściej jest to kod js, który może robić złe rzeczy.
Jak się bronić? To zależy co chcesz z danymi robić i jak je wyświetlać.
Jeśli nie interesują cię tagi, jakie userzy będą wkładać, a w większości wypadków zapewnie, nie będzie cię to interesowało, to przed zapisem danych przepuszczaj dane przez strip_tags
$dane = strip_tags($dane);

Dodatkowo, przed każdym wyświetleniem, stosuj htmlspecialchars, który zamieni znaki specjalne na encje, przez co uniemożliwisz atak js
Czyli zamiast:
echo $dane;
Rób
echo htmlspecialchars($dane);

ADMIN
Jeśli masz taki system praw i sprawdzasz to w ten sposób to pod względem bezpieczeństwa jest raczej ok.

2012-02-22 16:28:03 Post #3 barcelona

 
Dzięki, zapisane i zapamiętane

Odpowiedz