Hallo Leute,
habe mich etwas mit Stored Procedures befasst und doch einige Nachteile (Leistung etc.) kennengelernt. Ich habe mir jetzt ein anderes System gedacht, welches mich vor
SQL-Injections schützen soll und wollte euch mal dahingehend um Rat bitten.
Also: Ich nutze in PHP eine von mir erstelle Validator-Klasse um alle Benutzereingaben auf korrekte Formate, Länge und erlaubte/verbotene Zeichen zu prüfen. Unter anderen werden auch Worte wie "SELECT", "DELETE" etc. gefiltert.
Wie wäre es jetzt, wenn ich soetwas auch auf meine Datenbankklasse anwende, sodass ich die Statements - so wie meine Applikation sie verwenden wird - zuvor auf eine Whitelist setze. Jede
SQL-Anfrage, die dann ausgeführt wird, wird gegen die Whitelist geprüft. Das könnte zB so aussehen:
Code:
$
db = new
db("", "", "", "");
$
db->allowSQL("SELECT a,b,c FROM tabelle WHERE a = :zahl AND b = :string;");
$
db->
sql("SELECT a,b,c FROM tabelle WHERE a = 4 AND b = 'test';");
Klar würden die Statements dann doppelt geschrieben werden. Für die Programmierung/Debug würde ich eine Funktion "testsql" haben, die die Whitelist-Check umgeht, sodass ich in Ruhe programmieren kann. Wenn das Statements dann funktioniert, würde ich auf die obige Version nachträglich umstellen.
Das müsste doch, in Zusammenhang mit der Validator-Klasse, eine super-sichere Sache sein (hinsichtlich der
SQL-Injections), oder?
Was meint ihr?