Quelle: xkcd.com SQL Injections
Fallstudie
Mögliche Angriffe SELECT Passwort FROM Benutzer WHERE Benutzername = ''; DROP TABLE Benutzer; -- '
Happy Hacking Fallstudie auf Ziel: Überwinden der Anmeldung http://cwach.de/sqlinject/form.html Ziel: Überwinden der Anmeldung mysql_query() erlaubt nur eine Anfrage. D.h. die ‘; Angriffe funktionieren nicht Man muss die codierte Anfrage geschickt manipulieren
„Sanitize your inputs“ is_numeric() intval() Funktionen zur Behandlung von Variablen http://www.php.net/manual/de/ref.var.php is_int() Benutzereingaben überprüfen und bereinigen Gefährliche Zeichen in Zeichenketten escapen mysql_real_escape_string() $user = mysql_real_escape_string($_POST["user"]);
Weitere Maßnahmen Rechte des Datenbankbenutzers einschränken Keine Fehler oder Debug Ausgaben Verwendung von Bibliotheken Prepared Statements (z.B. mysqli) Objekt-Relational-Mapper (z.B. propel)