[php+mysql] Bezpieczne logowanie do serwisu.

0

Witam,
Jest sobie stronka na ktorej klienci mogą wyszukiwać swoje faktury , robić raporty, strona jest na linuxowym serwie WWW a baza na innym serwie w sieci lokalnej. Teraz kazdy uzytkownik ma użytkownika i hasło przydzielone przez firme.
Jak powinno wygladac bezpieczne logowanie?
Ja wczesniej zrobilem taki mechanizm ze user i haslo przechowywane jest w tabeli users (mysql) oczywiscie haslo jest zachaszowane. Teraz po kliknieciu loguj sprawdzanie jest czy jest taki user w bazie i czy zahaszowane haslo jest takie samo jak zahaszowane w tabeli. Jezeli tak to zmienna sesyjna np LOGIN przyjmuje wartosc usera i wchodzi do serwisua jezeli nie to wyjazd.
Strona jest zrobiona tak ze jest sobie plik main.php ktory ma w sobie switcha i dolacza odpowiednie pliki php gdzie na poczatku kazdego pliku jest sprawdzenie wartosci LOGIN i czy jest OK.
Chodzi mi glownie o bezpieczenstwo bazy, zeby nie namieszał ktos, cos sie jeszcze zabezpiecza dodatkwoo, czy po stronie serwa muszą byc odpowiednie zabezpiecznie ?
Dzieki za porade i prosze nie dawac linkow do google :)

0

register_globals = off
i filtruj pola formularza... nie przepuszczaj znakow typu ', ", -, ...

0

Ew. mysql_escape_string().

0
Patyk napisał(a)

Ew. mysql_escape_string().

A coś dokladniej ? Po co Dlaczego ?

0

zeby sie zabezpieczyc prze takiego typu loginami, np:
' or 1=1 --

0
ssnake napisał(a)

zeby sie zabezpieczyc prze takiego typu loginami, np:
' or 1=1 --

Ale dlaczego jak ktos wpisze taki tekst to jest to niebezpieczne ? Co sie moze stac ? Sory za męki :)

0

moze sie wykonac zapytanie
select * from tab where login='' or 1=1 --

0
ssnake napisał(a)

moze sie wykonac zapytanie
select * from tab where login='' or 1=1 --

Jezeli gosc wpisuje 2 pola, user i haslo a w bazie trzymany jest user i zahaszowane haslo : password(haslo) to raczej chyba nie ma szans zeby tak wszedl.
To moze sprobujecie sie wlamac tutaj:
http://www.mg.4en.com.pl/magazyn/

Zapraszam :)

0
Glina napisał(a)
ssnake napisał(a)

moze sie wykonac zapytanie
select * from tab where login='' or 1=1 --

Jezeli gosc wpisuje 2 pola, user i haslo a w bazie trzymany jest user i zahaszowane haslo : password(haslo) to raczej chyba nie ma szans zeby tak wszedl.
To moze sprobujecie sie wlamac tutaj:
http://www.mg.4en.com.pl/magazyn/

Zapraszam :)

o jej.. to jest tylko przykład, ssnake pisząc posta nie znał przeciez struktury twojej bazy danych. Poczytaj o atakach typu SQL Injection bo o nie chodzi. Jeżeli zabezpieczysz sie przed nimi i wyłaczysz register_globals to jesteś względnie bezpieczny.

0
Kooba napisał(a)

o jej.. to jest tylko przykład, ssnake pisząc posta nie znał przeciez struktury twojej bazy danych. Poczytaj o atakach typu SQL Injection bo o nie chodzi. Jeżeli zabezpieczysz sie przed nimi i wyłaczysz register_globals to jesteś względnie bezpieczny.

No wiem wiem, dzieki za odp poczytam :)

0

Jezeli gosc wpisuje 2 pola, user i haslo a w bazie trzymany jest user i zahaszowane haslo : password(haslo) to raczej chyba nie ma szans zeby tak wszedl.

To że masz ileśtam pól w bazie danych, lub że hasła są zaszyfrowane nie ma nic do rzeczy. I tak da się zastosować wymuszenie poprawności. Czyli np. gdy do pola login wpiszę:
cos' OR 1=1)--

to zapytanie do bazy danych będzie wyglądało tak:
<b>select * from user_m where (user='cos' OR 1=1)-- </b><i>' && haslo=password(''))</i>

Wszystko co znajduje się po -- jest komentarzem, więc tak na prawdę twoje zapytanie to jest tylko ten pogrubiony tekst. Dalej już się powinieneś domyśleć co się stanie, jeśli jedno z wyrażeń przy OR jest prawdziwe ;]

mysql_escape_string() wstawia backslasha przed znaki apostrofu (i kilka innych), przez co jest on interpretowany jako najnormalniejszy w świecie znak apostrofu, a nie znak końca danych tekstowych.

To moze sprobujecie sie wlamac tutaj:
http://www.mg.4en.com.pl/magazyn/

user image</url></quote>

0

Wszlkie zabezpieczenia na serwerze tracą trochę sens jesli ktoś pzrechwyci hasło "po drodze". Do swoich zabezpieczeń spróbUj dodać połączenie szyfrowane.

pozdrawiam

0

Do Autora postu. Czy zdajesz sobie sprawę, że twój przykładowy link do serwisu jest nadal nieodporny na cos' OR 1=1)-- ??

1 użytkowników online, w tym zalogowanych: 0, gości: 1