SQL Injektion

SQL Injektion ist wahrscheinlich eine der ältesten Angriffsvarianten auf Web-Applikationen, zwischenzeitlich gibt es aber eine Reihe an Möglichkeiten um dies zu verhindern:

  • Validierung und Typisierung von Daten vor Nutzung in Datenbank-Queries
  • Immer positiv validieren - Blacklisting von Inhalten vermeiden
  • PDO nutzen (via PECL für PHP 5.0, im Lieferumfang seit PHP 5.1)
  • MySQLis bzw. PEAR::DBs parameterisierte Statements nutzen
  • Escaping-Funktionen wie mysql_real_escape_string() nutzen

Unglücklicherweise ist es mit PHP 4.x einzig Sache des Programmieres vor SQL-Injektion sicheren Programmcode zu schreiben, erst PHP 5.1 bringt die Möglichkeit PDO zu nutzen und stellt damit ein sicheres SQL-Interface zur Verfügung. 

Die Benutzung von addslashes() ist unzureichend. Wie Chris Shiflett bereits demonstriert hat reicht addslashes() nicht aus, um sich vor SQL Injektionen zu schützen. 

In Bezug auf die magic_quotes-Einstellungen gibt die PHP-Group inzwischen eine rechte klare Richtlinie vor - ab PHP6 werden nicht nur der safe_mode und register_globals sondern auch magic_quotes-Einstellungen der Vergangenheit angehören. Applikationen die nur auf magic_quotes als Sicherheitsmerkmal setzen, sollten definitiv gemieden werden - insbesondere auch, da die Einstellung teilweise kaum repoduzierbare Fehler bei Dateiuploads verursachen kann.

Weitere Informationen


Netzwerke

Blogroll