Hallo
gibt es eine Funktion, mit der ich die Arrays $HTTP_POST_VARS und $HTTP_GET_VARS auf etwaige SQL Injection Versuche überprüfen kann?
Dies müsste doch theoretisch der beste Weg sein, SQL Injections abzufangen.
Ideal wäre, wenn die Funktion die Arrays sichert und dann zurückgibt.
Also die SQL I. rausfiltert.
mfg chaser
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Naja, nach dem Escapen für SQL-Abfragen sind die Variablen aber nicht mehr umbedingt für andere Ausgaben zu gebrauchen (wie z.B. die Ausgabe als HTML) und oftmals führt man dann auch noch weitere operationen durch bevor irgendwas in einem SQL-Query landet. Der sicherste Weg das Escapen nicht zu vergessen ist es wenn Du Direkt die Rückgabe von mysql_real_escape_string in die Abfrage übernimmst. Könntest die Funktion ggf. auch mittels array_walk auf die beiden Arrays loslassen...
Gruß
Borlander
Vor einiger Zeit habe ich dasselbe in einem Artikel entdeckt.
Also hab ich das mal ausprobiert.
Eine Eingabe vom Benutzer, die direkt im Query landet:
$Query=mysql_query("SELECT * FROM auth WHERE user='$user' AND pw='$pw'");
Eingabe:
$user: WLaner
$pw: ' OR ''='
So, wurde im Artikel "behauptet", kann man jetzt auf jeden Account zugreifen, ohne ein korrektes Passwort einzugeben. (Ist mir auch klar, wenn ich den finalen Query anschaun, obwohl ich des mit ''='' nicht kenn.)
Bei meinem Test wurde der Login-Versuch allerdings abgewiesen.
Also hab ich mir die POST-Vars mal mit PHP ausgeben lassen und siehe da:
echo $user; // WLaner
echo $pw; // \' OR \'\'=\'
Die Variablen wurden also schon vorher escaped, oder wie ist das anzunehmen? Mit mysql_real_escape_string wurde das ganze doppelt escaped...
Gibts vllt. in PHP schon eine Art Sicherheitseinstellung oder hab ich da einfach was falsch gemacht :-) ? Vllt. weist du da ja was, @Borl
WL
Das was Du da beobachtest hast sind die Magic-Quotes (einstellbar). Die Stören aber eher (z.B. auch bei der normalen Ausgabe) und decken auch nicht umbedingt alle bösen SQL-Sachen ab...
Gruß
Borlander