Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mysql + apostrof = katastrofa!
Forum PHP.pl > Forum > PHP
shpyo
witam,
czy moze mi ktos wytlumaczyc dlaczego jezeli ktos mi wpisal w formularzu do logowania login insteniejacego uzytkownika + apostrof ' i hash #, haslo byle jakie i zostal zalogowany do systemu !?

  1. <?
  2. $zalogowany = &#092;"SELECT * FROM adepci WHERE nick='$_POST[nick]' AND haslo='md5($_POST[passwd])' LIMIT 1\";
  3. ?>


mialem cos takiego jak wyzej, zmienna $_POST[nick] zaopatrzylem w addslashes i juz ten trik nie dziala.

Powie mi ktos dlaczego sie tak stalo? IMHO to moje zapytanie powinno z apostrofem zworcic false... lekko sie zalamalem sad.gif
anas
Hej.

Spróbuj tak:

  1. <?
  2. $zalogowany = 'SELECT * FROM adepci WHERE nick='.$_POST['nick'].' AND haslo=md5('.$_POST['passwd'].') LIMIT 0,1';
  3. ?>


pozdrawiam

anas
rogrog
# - hash - oznacza w SQLu komentarz
' - apostrof - wiadomo

spójrz na to od strony SQL
jeżeli ktoś wpisze jako login na przykład:

Kod
' OR 1=1 #


to zapytanie wygląda tak:

  1. SELECT * FROM adepci WHERE nick='' OR 1=1 #' AND haslo='tu wpisane haslo' LIMIT 1


jako że wszystko za znakiem komentarza # jest ignorowane to realnie wykonywane jest następujące zapytanie:

  1. SELECT * FROM adepci WHERE nick='' OR 1=1


zapytanie tego typu zwróci wszystkie rekordy, jakie masz w bazie, a więc użytkownik zostanie zalogowany

--------------------

Polecam poszukanie o "mysql_injections"
Polecam też funkcję mysql_escape_string" title="Zobacz w manualu PHP" target="_manual która zabezpieczy stronę przed tego typu atakami
shpyo
rogrog, dzieki bardzo za wytlumaczenie biggrin.gif teraz bede bral pod uwage takie szczegoliki biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.