Bobby Tables: útmutató az SQL injection megelőzéséhez
miért vesztette el Bobby iskolája a rekordokat?
az iskola nyilvánvalóan tárolja a diákok nevét a diákok nevű táblázatban. Amikor egy új diák érkezik, az iskola beilleszti a nevét ebbe a táblázatba. A beillesztést végző kód a következőképpen nézhet ki:
az első sor egy SQL beszúrási utasítást tartalmazó karakterláncot hoz létre. A $studentName
változó tartalma az SQL utasításba van ragasztva., A második sor elküldi a kapott SQL utasítást az adatbázisba. Ennek a kódnak az a hátránya, hogy a külső adatok, ebben az esetben a $studentName
tartalma az SQL utasítás részévé válik.
először nézzük meg, hogy néz ki az SQL utasítás, Ha beillesztünk egy John nevű hallgatót:
Ez pontosan azt teszi, amit akarunk: beilleszti John-t a diákok asztalába.
most behelyezzük a kis Bobby táblákat, a $studentName
Robert"); DROP TABLE Students;--
beállítással., Az SQL utasítás a következő lesz:
Ez beilleszti Robertet a hallgatói táblába. A Beszúrás nyilatkozatot azonban most egy CSEPPASZTAL-nyilatkozat követi, amely eltávolítja a teljes Diáktáblát. Jaj!
hogyan lehet elkerülni Bobby Tables
csak egy módja annak, hogy elkerüljék Bobby Tables támadások
- ne hozzon létre SQL utasításokat, amelyek külső adatokat tartalmaznak.
- paraméterezett SQL hívások használata.
Ez az. Ne próbálja meg elkerülni az érvénytelen karaktereket. Ne próbáld meg magad csinálni. Ismerje meg, hogyan kell használni paraméterezett nyilatkozatok. Mindig, minden egyes alkalommal.,
a szalag egy dolgot döntően rosszul kap. A válasz nem az, hogy” megtisztítsa az adatbázis bemeneteit”. Hajlamos a hibára.