Sven Rautenberg: Karsten

Beitrag lesen

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?

1. 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.

2. 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

--
"Love your nation - respect the others."