Heim  >  Artikel  >  Backend-Entwicklung  >  Ist mysql_real_escape_string() wirklich sicher? Die potenzielle Gefahr bei asiatischen Zeichenkodierungen.

Ist mysql_real_escape_string() wirklich sicher? Die potenzielle Gefahr bei asiatischen Zeichenkodierungen.

DDD
DDDOriginal
2024-10-26 15:02:02590Durchsuche

 Is mysql_real_escape_string() Really Safe? The Potential Pitfall with Asian Character Encodings.

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:

  • Vermeiden Sie die Verwendung von SET NAMES mit mysql_real_escape_string()
  • Verwenden Sie mysql_set_charset, um die Codierung bei Bedarf zu ändern
  • Verwenden Sie die UTF-8-Kodierung, da diese nicht anfällig für diese Umgehung ist

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn