mysql_real_escape_string funktioniert nicht?

D

di-five

Hallo,

ich habe folgenden Quellcode:

PHP:
    $verbindung = mysql_connect("localhost", "user", "pass") or die ("Keine Verbindung möglich.");

    mysql_select_db("db") or die ("Die Datenbank existiert nicht.");


    //Befehl zum speichern in der Datenbank
    $query = sprintf("INSERT INTO bestellung_info (anrede, vorname, nachname, strasse, plz, ort, land, email, datum, uhrzeit, nachricht)

    VALUES('$anrede', '$vorname', '$nachname', '$strasse', '$plz', '$ort', '$land', '$email', '$datum', '$uhrzeit', '$nachricht')",
    mysql_real_escape_string($anrede),
    mysql_real_escape_string($vorname),
    mysql_real_escape_string($nachname),
    mysql_real_escape_string($strasse),
    mysql_real_escape_string($plz),
    mysql_real_escape_string($ort),
    mysql_real_escape_string($land),
    mysql_real_escape_string($email),
    mysql_real_escape_string($datum),
    mysql_real_escape_string($uhrzeit),
    mysql_real_escape_string($nachricht)
    );
    mysql_query($query);

Wenn ich nun in die Datenbank schaue, steht da aber genau drin, was ich in das Textfeld reingschrieben habe:

Code:
SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''

Der Code wird eins zu eins übernommen, funktioniert mysql_real_escape_string dann überhaupt?

Viele Grüße
di-five
 
Muss das nicht so aussehen?

PHP:
VALUES('".mysql_real_escape_string($anrede)."', '".mysql_real_escape_string($vorname)."', '".mysql_real_escape_string($nachname)."', '".mysql_real_escape_string($strasse)."', '".mysql_real_escape_string($plz)."', '".mysql_real_escape_string($ort)."', '".mysql_real_escape_string($land)."', '".mysql_real_escape_string($email)."', '".mysql_real_escape_string($datum)."', '".mysql_real_escape_string($uhrzeit)."', '".mysql_real_escape_string($nachricht)."')",
 
Du musst schon die Formatzeichen verwenden:
PHP:
$query = sprintf("INSERT INTO bestellung_info (anrede, vorname, nachname, strasse, plz, ort, land, email, datum, uhrzeit, nachricht) 

VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", 
mysql_real_escape_string($anrede), 
mysql_real_escape_string($vorname), 
mysql_real_escape_string($nachname), 
mysql_real_escape_string($strasse), 
mysql_real_escape_string($plz), 
mysql_real_escape_string($ort), 
mysql_real_escape_string($land), 
mysql_real_escape_string($email), 
mysql_real_escape_string($datum), 
mysql_real_escape_string($uhrzeit), 
mysql_real_escape_string($nachricht) 
);
 
Lies dir das zweite Beispiel zur Injection nochmal durch ;)
http://www.php.net/manual/de/function.mysql-real-escape-string.php

Dort wird kein mysql_real_escape() genutzt. Würde man es nutzen wäre der SQL-Befehl in dem PHP.net-Beispiel:
Code:
SELECT * FROM users WHERE user='aidan' AND password='\' OR \'\'=\''
oder so ähnlich.

Sinngemäß: Wenn du den kompletten Befehl in einer Variablen drin hast wird er so abgeändert, das daraus kein eigentlicher SQL-Befehl entstehen kann.
 
Zuletzt bearbeitet:
Hallo,

vielen Dank für eure Antworten!
Die Version mit den Formatzeichen funktioniert einwandfrei :)

Viele Grüße
di-five

// Das ist eine schöne Version
 
Zuletzt bearbeitet von einem Moderator:
Zurück