SQL-Injection, Injections, per RegExp verhindern möglich?

QUEST08

Erfahrenes Mitglied
Hallo PHPler,

normalerweise wird ja u.a. mysql_real_escape_string verwendet um SQL-Injections zu verhindern.

Nun möchte ich aber alle Formulare und deren Felder mit RegExp prüfen bevor überhaupt irgendwas passiert.

Welche Zeichen sind für SQL-Injections bzw. Injections verwendbar? Also ich weiß, dass ' ein beliebter Kandidat ist. Doch wie sieht es mit [ oder mit " oder mit $ aus? Eigentlich geht es ja darum, den Code mit ' oder " zu unterbrechen. Da dürfte es ja nicht mehr Zeichen als die beiden geben, oder?

Wenn dem so ist, kann ich auf sämtliche Inputs, egal ob $_POST, $_GET, Cookie, etc. eigentlich die "Eingabe" per regexp prüfen, oder? Ich müsste also regexp negativieren (zum Beispiel für das Feld "Nachricht", da ja dort fast alle Zeichen zugelassen sind, bis auf die, wo zu Injections führen könnten. Wie ist dies machbar?

Ich werde die Eingaben natürlich nochmal per mysql_real_escape_string prüfen, bevor sie in die DB wandern, aber es wäre dann eigentlich nicht mehr nötig, richtig?
 
Laut der PHP-Doku werden Folgende Zeichen behandelt:
Der Backslash \
Einfache ' und doppelte " Anführungszeichen
Zeilenumbrüche (\n und \r)
und die (Ascii-Steuer-)Zeichen mit dem Code 0 und 26

Eckige Klammern und Dollarzeichen sind nicht dabei.

http://php.net/manual/de/function.mysql-real-escape-string.php

Und warum willst du das Rad neu erfinden?
Was spricht dagegen, die fertige Funktion weiterzuverwenden?
 
Zuletzt bearbeitet:
hallo sheel,

da hätt ich auch drauf kommen können, mal nachzusehen was mysql_real_escape_string prüft.

Hast du eine Idee, wie ich einen String negativ prüfe? Also das ich eben ' " sowie \ nicht erlaube? Oder ist es eher Sinnvoll, direkt (auch bei einem Kontaktformular) mysql_real_escape_string bzw. addslashes() anzuwenen?
 
[phpf]addslashes[/phpf] ist in diesem Kontext eher nutzlos.
Nutz die dafür vorgesehenen Funktionen. [phpf]mysql_real_escape_string[/phpf] bzw. mit PHP5 auch direkt auf MySQLi umsteigen, oder einen Wrapper wie PDO z. B. mit Prepared Statements (was auch von MySQLi unterstützt wird).
 
Zurück