Ist mysql_real_escape_string() ein uneinnehmbarer Schutzschild gegen SQL-Injection?
Ein Abschnitt auf justinshattuck.com legt nahe, dass mysql_real_escape_string() gegen bestimmte fehlbar ist Asiatische Zeichenkodierungen. Insbesondere wird behauptet, dass die Codierung mysql_real_escape_string() mithilfe von BIG5 oder GBK umgeht, um gefährliche Zeichen in Abfragen einzuschleusen.
Ist diese Sicherheitslücke real?
Laut Stefan Esser, Die Antwort ist ein beunruhigendes Ja. Er behauptet, dass mysql_real_escape_string() ins Stocken gerät, wenn SET NAMES verwendet wird. Diese Methode ändert die Kodierung entsprechend den Anforderungen der Anwendung, ohne mysql_real_escape_string() zu informieren. Wenn eine Multibyte-Kodierung einen Backslash als zweites, drittes oder viertes Byte zulässt, kommt es daher zu Problemen. Mysql_real_escape_string() bemerkt diese Unregelmäßigkeit nicht und kann die Zeichen nicht korrekt maskieren.
Schutz Ihrer Website
Esser schlägt vor, dass UTF-8 eine sichere Codierung bleibt, aber UTF -8 ist nicht immer eine Option. Leider ist mysql_set_charset, die sicherere Alternative, nur in neueren PHP-Versionen verfügbar.
Das obige ist der detaillierte Inhalt vonIst „mysql_real_escape_string()' ein zuverlässiger Schutz gegen SQL-Injection in allen Zeichenkodierungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!