Moin!
Die Abfrage gibt niemals true zurück. Ich gehe mal davon aus, dass die regExp nicht stimmt.
Nein, die Regex wird dynamisch mit einer Variablen befüllt, welche "ausführbaren" Regex-Code enthält. Das ist qualitativ dasselbe, wie wenn eine Variable ausführbaren SQL-Code enthält.
Wer befüllt die SQL-Variable? Der Programmierer. Wer ist verantwortlich für fehlendes Escaping oder Nichtverwendung von Prepared Statements? Der Programmierer.
Wer befüllt die Regex-Variable? Der Programmierer. Wer ist verantwortlich für fehlerhaft formulierte Regex-Ausdrücke in der Variablen? Der Programmierer.
Du willst einen simplen Schutz gegen SQL-Injection. Wenn es den gäbe, wäre er schon lange in Datenbanken implementiert. Wenn er auf dem Client mit Leichtigkeit realisierbar wäre, wäre schon längst die Funktion "secure_mysql_query()" erfunden. Ist beides nicht der Fall, weil es keinen simplen Schutz gibt.
Der aufwendige Schutz ist, sich sein SQL-Statement programmatisch zusammenbauen zu lassen. Die dazu notwendigen SQL-Generatoren sind in ORM-Frameworks wie Doctrine oder Propel enthalten. Die willst du nicht selbst programmieren - du traust dir ja schon beim simplen Schreiben von mehrheitlich statischem SQL nicht selbst über den Weg.
- Sven Rautenberg