Dynamiczny sql i problemy z nim związane - bezpieczeństwo baz danych


Many nasze zapytanie $sql=select * from users where login = '$login' and password = '$password';
Spróbujmy wpisać w pole login ' or 1 = 1;--, hasło dowolne, ale na wszelki wypadek niepuste.
Zapytanie przyjmie postać select * from users where login = '' or 1 = 1;--and password = 'haslo'; Wynik będzie taki, że o ile tabela jest niepusta, to zostaną zwrócone jakieś rekordy (wszystkie), przy czym zapewne pierwszy rekord zostanie uznany za rekord z naszymi danymi. Zapewne na wyświetlonej stronie pokaże się gdzieś napis w stylu witaj ala.
Możemy poznać loginy wszystkich użytkowników wpisując login: ' or 1 = 1 where login > 'ala' order by login;--
Interesującym nas loginem może być admin albo coś w tym stylu.
A co się stanie jeśli wpiszemy login ';drop table uzytkownicy;--? Usuniemy tabelę użytkownicy. Można użyć poleceń update lub insert, aby zmodyfikować tabelę. Ale skąd mamy się dowiedzieć jak nazywa się tabela i jakie są nazwy pól?


dalej