2010-04-29 13 views
10

Ich habe immer gelesen, dass Magic Quotes SQL Injection überhaupt nicht stoppen, aber ich kann nicht verstehen, warum nicht! Als Beispiel lassen Sie uns sagen, dass wir die folgende Abfrage haben:Erfolgreiche SQL Injection trotz PHP Magic Quotes

SELECT * FROM tablename 
    WHERE email='$x'; 

Wenn nun der Eingangs Benutzer $x=' OR 1=1 -- macht, würde die Abfrage sein:

SELECT * FROM tablename 
    WHERE email='\' OR 1=1 --'; 

Der Schrägstrich wird von Magic ohne Zitate hinzugefügt werden Schaden angerichtet!

Gibt es eine Möglichkeit, dass ich nicht sehe, wo der Benutzer die Magic Quote-Einfügungen hier umgehen kann?

Antwort

21

Der Trick besteht normalerweise darin, einen binären Wert zu übergeben, so dass der Backslash Teil eines gültigen Multibyte-Zeichens wird. Hier ist eine blog post darüber.

+0

Ich hatte immer den Eindruck, dass SQL-Injection ein ernsthafteres Problem war, das fast alle Anfängerversuche an einem Skript beinträchtigte. Ich kann immer noch nicht glauben, dass magische Zitate dich absolut sicher machen, wenn du keinen Multi-Byte-Zeichensatz benutzt hast. –