Quelle: xkcd.com SQL Injections Fallstudie Mögliche Angriffe SELECT Passwort FROM Benutzer WHERE Benutzername = ''; DROP TABLE Benutzer; -- ' Happy Hacking • Fallstudie auf – 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“ Funktionen zur Behandlung von Variablen http://www.php.net/manual/de/ref.var.php is_numeric() is_int() intval() 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)