vorige Präsentation: Web Security | zurück zum Buch-Kapitel [esc] | Nächste Präsentation Authentifizierung und Session-Management
Die OWASP beschreibt dieses Problem allgemein so:
Injection-Schwachstellen tauchen auf, wenn eine Anwendung nicht vertrauenswürdige Daten an einen Interpreter weiterleitet. Injection Schwachstellen sind weit verbreitet, besonders in altem Code; sie finden sich in SQL-, LDAP- und XPath-Anfragen, Systembefehlen, Programm-parametern usw.
Wir haben im Kapitel PHP MYSQL 2 → Löschen schon die SQL Injection behandelt. Zur Verhinderung von SQL-Injection steht uns in PHP die Prepared Statements zur Verfügung:
$query = $dbh->prepare("SELECT * FROM users WHERE id=?");
$query->execute(array( $_GET['pid'] ) );
Mit dem prepare wird das SQL-Statement bereits vor-kompiliert. Die Daten,
die als Input vom User/der Userin kommen werden mit execute an die Datenbank
übergeben, können aber nicht mehr als SQL interpretiert werden.
Eine zweite Schreibweise für prepared Statement ist noch besser lesbar: dabei werden statt der Fragezeichen benannte Platzhalter verwendet:
$stm = $dbh->prepare ( "SELECT * FROM USERS WHERE USERNAME LIKE :name" );
$stm->bindParam(":name", $_POST['name'] );
$stm->execute();
Die OWASP empfiehlt:
Im dritten und schlechtesten Fall ist weiter zu beachten:
Unabhängig von den oben genannten Punkt gilt noch die Empfehlung:
Siehe auch SQL Injection Prevention Cheat Sheet
vorige Präsentation: Web Security | zurück zum Buch-Kapitel [esc] | Nächste Präsentation Authentifizierung und Session-Management
/
#