Hallo,
Ich habe die Funktion getestet und gemerkt, dass worte wie DELETE nicht "escaped" werden.
Muss ja auch gar nicht. Denn sofern du bei den SQL Abfragen nicht schlampig warst, passiert da nichts.
Beispiel:
SELECT * FROMtabelleWHEREspalte='$Usereingabe'
Wenn der User nun etwas eingibt wie"bla'; DELETE * FROM
tabelleWHERE '1'='1"Dann kommt raus
SELECT * FROM
tabelleWHEREspalte='bla';
DELETE * FROMtabelleWHERE '1'='1'Ist soas in der theorie möglich?
Nein.
1. mysql_query(); sendet immer nur __eine__ Anweisung an die DB. Die zweiter Anweisung (DELETE...), würde nicht an die DB gesendet werden.
2.
<?php
$usereingabe = mysql_real_escape_string($eingabe);
mysql_query("SELECT * FROM tb WHERE username = '$username';");
?>
Wenn der User jetzt z.B. folgendes sendet:
test' OR 1=1
Dann würde das durch das mysql_real_escape_string(); so aussehen:
SELECT * FROM tb WHERE username = 'test' OR 1=1';
Dabei wurde das ' maskiert, und somit wird jetzt nach dem Username "test' OR 1=1" gesucht.
mysql_real_escape_string() ruft die MySQL Bibliotheksfunktion mysql_escape_string auf, diese stellt den folgenden Zeichen einen Backslash voran: NULL, \x00, \n, \r, , ', " und \x1a.
MFG
Andavos