– Bobby-Tabellen: Ein Leitfaden zur Verhinderung von SQL-injection
Warum hat Bobby“s Schule verlieren Ihre Aufzeichnungen?
Die Schule speichert anscheinend die Namen ihrer Schüler in einer Tabelle namens Schüler. Wenn ein neuer Schüler ankommt, fügt die Schule seinen Namen in diese Tabelle ein. Der Code, der das Einfügen ausführt, könnte wie folgt aussehen:
Die erste Zeile erstellt eine Zeichenfolge, die eine SQL INSERT Anweisung enthält. Der Inhalt der Variablen $studentName
wird in die SQL-Anweisung eingefügt., Die zweite Zeile sendet die resultierende SQL-Anweisung an die Datenbank. Der Fallstrick dieses Codes besteht darin, dass externe Daten, in diesem Fall der Inhalt von $studentName
, Teil der SQL-Anweisung werden.
Lassen Sie uns zuerst sehen, wie die SQL-Anweisung aussieht, wenn wir einen Schüler namens John einfügen:
Dies tut genau das, was wir wollen: Es fügt John in die Studententabelle ein.
Jetzt fügen wir kleine Bobby-Tabellen ein, indem wir $studentName
auf Robert"); DROP TABLE Students;--
setzen., Die SQL-Anweisung wird:
Dadurch wird Robert in die Students-Tabelle eingefügt. Auf die INSERT-Anweisung folgt nun jedoch eine DROP TABLE-Anweisung, die die gesamte Students-Tabelle entfernt. Autsch!
So vermeiden Sie Bobby Tables
Es gibt nur eine Möglichkeit, Bobby Tables-Angriffe zu vermeiden
- Erstellen Sie keine SQL-Anweisungen, die externe Daten enthalten.
- Verwenden Sie parametrisierte SQL-Aufrufe.
Das ist es. Versuchen Sie nicht, ungültige Zeichen zu entkommen. Don“t versuchen, es selbst zu tun. Erfahren Sie, wie Sie parametrisierte Anweisungen verwenden. Immer, jedes Mal.,
Der Streifen bekommt eine Sache entscheidend falsch. Die Antwort besteht nicht darin, Ihre Datenbankeingaben selbst zu bereinigen. Es ist fehleranfällig.