Moin!
Wenn ich alle Nutzereingaben stets kontrolliere, daß nur das enthalten ist, was ich auch als zulässige Eingabe erwarte, und ferner weiß, daß diese Zeichen (\x00, \n, \r, , ', " und \x1a) nicht enthalten sind, ist doch der Gebrauch von mysql_real_escape_string() an sich überflüssig, oder?
Was ist einfacher aus deiner Sicht?
Im Datenbankmodul vollkommen unabhängig von den tatsächlich auftretenden Nutzerdaten immer Escaping zu betreiben und damit 100% sicher zu sein, dass keine Injection stattfinden kann.
Oder im Datenbankmodul zu überlegen, welches Datenformat das jeweilige Feld tatsächlich hat, und darauf zu hoffen, dass das Validierungsmodul tatsächlich benutzt, fehlerfrei programmiert und korrekte Angaben durchläßt?
Aus meiner Sicht ergibt sich nahezu zwingend nur Option 1: Die Sicherheit der Applikation erreicht im Punkt SQL-Injection nur dann 100% ohne weiteres Nachdenken, wenn ebenfalls ohne weiteres Nachdenken 100% der aus Variablen in SQL-Strings integrierten Daten in diesem Kontext direkt vor ihrer Benutzung escaped werden.
Du sparst dir eventuell 0,1% CPU-Aufwand, du gewinnst aber mindestens 100% Gehirnkapazität für die übrigen Programmieraufgaben. Und verhindert 100% der durch Option 2 möglichen Programmierfehler.
- Sven Rautenberg
Die Frage ist für mich, was sinnvoller ist. Ich denke, man sollte stets alle Eingaben überprüfen. Ich hatte das Beispiel Benutzername. Wenn ich weitere Fehlfunktionen ausschließen will (Prämisse: nur [a-zA-Z]), muß ich die Eingaben sowieso überprüfen. Warum dann noch escapen? Ich vertraue doch nicht darauf, ausschließlich zu escapen und daß die Eingabe schon ein valides Format haben wird.
Fehlerfreie Programmierung: Stimmt, es kann sinnvoll sein, Plausibilität zu prüfen und trotzdem escapen. Aber nicht bei einer so einfachen Sache wie einem Benutzername.