2011-01-09 15 views
1

meine Website hat PHP-Befehl:Warum funktioniert meine Abfrage nicht?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE users SET password=abc WHERE id=1' at line 1

Aber in phpmyamin Abfrage erfolgreich ausgeführt:

mysql_query("SELECT * FROM users WHERE id=" . $_GET["id"]) or die(mysql_error()); 

Wenn ich URL

http://example.com/index.php?id=1;%20UPDATE%20users%20SET%20password=123%20WHERE%20id=1 

bekomme ich folgende Fehlermeldung eingeben. Was ist hier falsch? Warum wird es nicht im Browser ausgeführt?

+8

Uhm, versuchen Sie SQL Ihre eigene Abfrage zu injizieren? Das ist wahnsinnig unsicher. – Yahel

+1

@yc: Wahrscheinlich nur als Experiment oder für Kicks – BoltClock

+0

Ich schrieb diese Website mit zwei weiteren Entwicklern, und einer von ihnen machte diesen Fehler. Ich möchte ihm einen Brief mit einem Injektionsbeispiel schreiben, das Angreifer fälschen kann und will, dass dieses Beispiel mehr als nur '1 UND 1 = 0 UNION SELECT ...' ist. Er ist ein Neuling und es wird gut sein, ihm zu zeigen, wie ernst dieser Fehler ist. – Poma

Antwort

4

mysql_query() nicht mehrere Abfragen in einem einzigen Aufruf unterstützen (die Sie zu injizieren versuchen):

SELECT * FROM users WHERE id=1; 
UPDATE users SET password=abc WHERE id=1 

Daraus ergibt sich die „Syntaxfehler“ .

Jetzt schützen Sie diese Abfrage.

7

mysql_query() sendet eine eindeutige Abfrage (mehrere Abfragen werden nicht unterstützt)“

Wenn Sie beabsichtigen, mysql Injektion so zu ermöglichen, mysql_query werden es nicht mögen. Wenn Sie nicht sind, zu verhindern, dass die mysql_real_escape_string($_GET["id"]); ‚Injektion‘

Verwandte Themen