Moin!
Abgesehen davon hatte ich bislang den Eindruck, Prepared Statements sind vor allem dann sinnvoll, wenn die Absicht besteht, mehr als einen gleichartigen Query durchzuführen. Also beispielsweise massenhaft INSERTs oder UPDATEs.
Ich nutze Prepared Statements derzeit wegen der erhofften Sicherheit.
Sie bringen dir vielleicht ein winziges Plus an Sicherheit wegen der Unmöglichkeit, durch Unachtsamkeit das Escaping zu vergessen. Ansonsten ist vom Standpunkt der Sicherheit ein Prepared Statement vollkommen identisch zu einem zusammengebauten, escapeten Query.
Filtern ist toll. Nur: Was bleibt hängen, und was kommt durch deinen Filter durch?
Alles was ich für Sinnvoll halte kommt durch, wenn die Möglichkeit besteht, nutze ich ein Array, dass alle erlaubten Zeichen, Wörter oder Werte bereithält, die ich erwarte.
Die Theorie, nur durchzulassen, was man kennt und erwartet, ist gut.
Leider sieht deine Praxis anders aus: Du filterst Dinge, von denen du glaubst, dass sie vermutlich schlecht sind, und lässt den Rest durch!
Ein Beispiel aus meiner Seite:
/**
* $_SERVER['REQUEST_URI'] von $_GET-Variablen befreien um Aktuellen Path zu haben
*/
$mein_server_request = preg_replace('|?.+$|', '', $_SERVER['REQUEST_URI']);
[link:http://blog.php-security.org/archives/76-Holes-in-most-preg_match-filters.html]
$query_request_check =
(
(!preg_match("#http|include|<|>|%3C|%3E|%22|ftp|:|script#", $_SERVER['REQUEST_URI']))
Hier hast du eine "nette" Bad-Word-Liste. Dumm nur, dass du auf vermutlich genauso wirksame Bestandteile wie "SCRIPT" oder "INCLUDE" in Upper Case nicht reagierst.
AND
(strlen($_SERVER['REQUEST_URI']) > 0 && strlen($_SERVER['REQUEST_URI']) < 90)
)
? $mein_server_request
: 'Start' ;
Insgesamt scheint mir, dass du hier ein Konstrukt zusammengebastelt hast, dass du selbst nicht mit einem Satz erklären kannst, und dessen Funktion daher auch immer weiter im Dunklen verschwindet.
Mir persönlich wäre jedenfalls nicht wohl bei der Überlegung, was man eventuell auf deiner Site so anstellen könnte. Das zu beurteilen ist aber nicht möglich, da der restliche Code fehlt.
Meine Faustregel ist da immer: Bevor ich irgendwas selbst parse, verlasse ich mich lieber auf die vorgefertigten Funktionen der benutzten Programmiersprache, die mir die benötigten Daten u.U. mundgerecht servieren.
> Das Ergebnis jage ich dann mittels Prepared Statement durch meine Datenbank.
Das dürfte dann das kleinste Problem darstellen.
- Sven Rautenberg
--
"Love your nation - respect the others."