Methoden zur Verhinderung von SQL Injection

  • Fehlende Validierung von Benutzerdaten ist der häufigste Fehler, den man bei der Web- bzw. Internetentwicklung machen kann. Selbst große Softwarefirmen und bekannte Applikationen wie zum Beispiel phpBB sind nicht davon ausgenommen.


    Man sollte immer darauf achten, daß die Daten, welche der Client an den Server schickt, genauestens überprüft werden. Die Daten können in den superglobalen Arrays $_POST, $_GET, $_COOKIE und $_FILES stehen. Auch die superglobale Variable $_SERVER kann vom Client beeinflußt werden. (User-Agent, Encoding usw.)


    Bei der Prüfung von Integerwerten ist eine Überprüfung sehr einfach. Mit der PHP-Funktion is_numeric() kann eine Zahl (wie z.B. Telefonnummer oder PLZ) überprüft werden - die Funktion gibt FALSE zurück, wenn das übergebene Argument nicht numerisch ist. Bei primitiven Datentypen wie int, float etc. kann auch ein einfaches Casting ausreichend sein, um missliebige Eingaben auszufiltern - z.B. könnte ein "(int) $_POST[user_id']" vor SQL-Injection in dieser per POST übermittelten Variable schützen.


    Strings sind naturgemäß nicht so einfach zu überprüfen, da sie prinzipiell beliebige, auch sonst als Steuerzeichen interpretierte Zeichen enthalten können. So könnte eine (als Text per POST übermittelte) E-Mail natürlich die Zeichen " und enthalten, die ansonsten für SQL-Injections verwendet werden können. Hier bietet sich eine Überprüfung per Whitelist an.