Więc to już jest część konkretnego problemu. 5 zapytań bym się nie bał. 50 to gorzej.
Jeśli już przy SQL jesteśmy, to tak samo jest niebezpieczny jak include()
Kod: Zaznacz cały
mysql_query("SELECT * FROM users WHERE login='$login' and haslo='$haslo'");
Zaloguje każdego na hasło:
' OR 1 --
lub login:
wybranylogin' --
Coprawda PHP ma standardowo właczone
magic quotes, które przed tym atakiem chroni początkujących webmasterów, ale czasem może być wyłączone, twórca mający dość \" w tekście zacznie nadużywać stripslashes() albo spreparowany login można podrzucić inną drogą.
Natomiast już nic nie uchroni w takim przypadku:
Kod: Zaznacz cały
mysql_query("SELECT * FROM foo WHERE id=$id");
(zauważ brak cudzysłowiu wokół $id).
Twórcy stron zakładają, że $id to liczba. Hackerzy wolą gdy $id to:
1 OR 1
i wszystkie dane są na tależu.
Nowsze wersje MySQL obsługują też subqueries, więc dzięki takiemu byle $id atakujący dostaje możliwość przeglądania sobie całej bazy.