![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 10.04.2007 Skąd: znienacka. Ostrzeżenie: (0%) ![]() ![]() |
Ten kod powinien w wypadku wpisania złego hasła wyświetlić nad formularzem "Podano złe dane!!!" Ale nie wyświetla absolutnie nic. Przy podaniu dobrego loginu i hasła jedynie loguje. Co jest nie tak?
![]()
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 2 Dołączył: 27.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Stosuj wcięcia. Newralgiczny kawalek kodu masz nieczytelnie sformatowany.
Sprawdzanie poprawności sprawdziłeś do sprawdzenia czy zmienne w $_POST są ustawione czy nie. Zatem wpisanie nieistniejacego loginu i hasła nie pociągnie wykonania linii 67. Co gorsza, mozna jako dane wpisać typowe złosliwości typu SQL injection: loginn: a' OR name <> ' ![]() hasloo2: a' OR pass <> ' ![]() wtedy PHP mając "SELECT * from `char` where name = '$loginn' AND pass = '$hasloo2'" złoży zapytanie: SELECT * from `char` where name = 'a' OR name <> '' AND pass = 'a' OR pass <> '' AND ma wyższy priorytet niz OR, wiec wyrazenie logiczne obliczy się jakby były nawiasy: a OR b AND c OR d jest tożsame z a OR (b AND c) OR d Zdanie d w naszym zapytaniu jest zawsze prawdziwe, wiec całe wyrazenie logiczne bedzie prawdzwe dla kazdego rekordu. Sprowadza się zatem do żadania pokazania uzytkownikow z loginem a lub niepustym haslem. Zasadniczo wszytkich, choć w zamysłe pewnie miało zwrócić tego jednego jedynego. A co jeśli nie ma ataku SQL injection tylko nieistniejace login i hasło (czyli sytuacja o jaką pytałeś)? System zaloguje a funkcja ShowLogin w wierszu 25 nie znajdzie odpowiedniego rekordu. Poza tym mała uwaga wydajnościowa. Jesli już masz wiersz z danymi, to go nie puszczaj tak łatwo. Ten drugi SELECT jest niepotrzebny. Ten post edytował ocochodzi 25.03.2008, 23:37:44 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:31 |