Autor Zpráva
Duchaplny
Profil
Zdravím,

akurát som si prerobil testovací projekt z mysql_* na PDO. Chcel by som si teraz vyskúšať nejaké SQL Injection útoky, či je to dostatočne zabezpečené..

INSERT a UPDATE vykonávam cez <form> (metóda $_POST), a ID si vytiahnem z DB (MySQL) a použijem ho pri ukladaní: WHERE id=:id, a následne uložím $stmt->execute(array(':id' => $_GET['id']));
V podstate jediná ochrana, čo mám je momentálne nastavenie dĺžky vstupu na max. 20-25 písmen..

Chcem zistiť, či nejakým upraveným vstupom, môžem docieliť napr. obídenie hesla alebo miesto vloženia/updatu tabuľky ju celú vymazať. Skúšal som napr. do kolonky, ktorá sa ukladá (INSERT) napísať: "a';DROP TABLE users;", a uložilo mi to presne v tomto znení do db (nič nevymaže). Nevyznám sa v tom, možno na to idem zle, a možno to je vďaka PDO, ale chcem mať istotu..

Poradíte mi nejaké konkrétne vstupy, ktoré by mohli urobiť neporiadok v databáze ?
pcmanik
Profil
Duchaplny:
Stači pouziť prepared statements, ktoré zjavne používaš a vyhneš sa všetkým problémom ktoré by mohli nastať.
Duchaplny
Profil
pcmanik:
presne to používam, ak teda naozaj stačí len toto, a nehrozí SQL Injection, tak ďakujem..
Jan Tvrdík
Profil
Duchaplny:
presne to používam, ak teda naozaj stačí len toto, a nehrozí SQL Injection, tak ďakujem..
Jen upozorním na to, že prepared statements nelze použít na všechny typy SQL dotazů. V případě, že na takový SQL dotaz narazíš, je nutné použít normální escapování.
Duchaplny
Profil
Jan Tvrdík:
Jen upozorním na to, že prepared statements nelze použít na všechny typy SQL dotazů. V případě, že na takový SQL dotaz narazíš, je nutné použít normální escapování.
zatiaľ som nemal problém s tým, že by niečo nešlo.. asi to platí pre náročnejšie SQL dotazy, než používam..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0