Andavos: Was alles ersetzt mysql_real_escape_string()?

Beitrag lesen

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 * FROM tabelle WHERE spalte='$Usereingabe'
Wenn der User nun etwas eingibt wie

"bla'; DELETE * FROM tabelle WHERE '1'='1"

Dann kommt raus

SELECT * FROM tabelle WHERE spalte='bla';
DELETE * FROM tabelle WHERE '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