Heim >Backend-Entwicklung >PHP-Tutorial >Ist mysql_real_escape_string() wirklich sicher? Die potenzielle Gefahr bei asiatischen Zeichenkodierungen.
Schutz vor SQL-Injection: Die Einschränkungen von mysql_real_escape_string()
Obwohl mysql_real_escape_string() häufig zur Verhinderung von SQL-Injection verwendet wird, ist dies bereits der Fall behauptete, dass es mit bestimmten asiatischen Zeichenkodierungen auf Websites umgangen werden kann, die keine vorbereiteten Anweisungen verwenden.
Das Problem mit der Umgehung
Laut Justin Shattuck ist die Umgehung möglich durch die Verwendung von Zeichen aus den Zeichenkodierungen Big5 oder GBK. Diese Kodierungen ermöglichen die Darstellung von Backslashes als sekundäre oder höherwertige Bytes, was dazu führen kann, dass mysql_real_escape_string() sie nicht ordnungsgemäß maskiert.
Erklärung von Stefan Esser
Stefan Esser erklärt dass die Sicherheitslücke dadurch entsteht, dass mysql_real_escape_string() die über SET NAMES vorgenommenen Änderungen nicht kennt, wodurch die Kodierung geändert werden kann. Wenn eine Multibyte-Kodierung verwendet wird, können Backslashes als mehrere Bytes dargestellt werden, wodurch möglicherweise der Escape-Prozess umgangen wird.
Ist UTF-8 sicher?
Esser weist darauf hin Eine Ausnahme von diesem Problem bildet UTF-8, da es Backslashes an jeder Byteposition korrekt verarbeitet. Er empfiehlt jedoch die Verwendung von mysql_set_charset zum Ändern der Codierung, da dies eine sicherere und aktuellere Option ist.
Empfehlungen
Um einen vollständigen Schutz vor SQL-Injection zu gewährleisten, wird die Verwendung von Prepared empfohlen Anweisungen, die für dieses Umgehungsproblem nicht anfällig sind. Wenn vorbereitete Anweisungen keine Option sind, sollten Sie Folgendes berücksichtigen:
Das obige ist der detaillierte Inhalt vonIst mysql_real_escape_string() wirklich sicher? Die potenzielle Gefahr bei asiatischen Zeichenkodierungen.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!