MySQL-Injection-Schwachstellen mit mysql_real_escape_string()
Trotz seiner weit verbreiteten Verwendung schützt mysql_real_escape_string() unter bestimmten Umständen möglicherweise nicht vollständig vor SQL-Injection-Angriffen.
Kodierungen asiatischer Zeichen
Laut JustinShattuck.com können bestimmte asiatische Zeichenkodierungen mysql_real_escape_string() umgehen, wie das Beispiel mit chinesischen Big5-Zeichen zeigt. Diese Sicherheitslücke entsteht, wenn:
- mysql_real_escape_string() verwendet wird.
- SET NAMES wird verwendet, um die Standardzeichenkodierung auf eine Multibyte-Kodierung umzustellen.
- Das gewählte Multibyte Die Codierung erlaubt Backslashes ("") als zweites, drittes oder nachfolgendes Byte.
Auswirkungen und Abhilfe
Wie Stefan Esser erklärt, tritt diese Sicherheitslücke auf, weil mysql_real_escape_string() dies nicht berücksichtigt die durch SET NAMES verursachten Codierungsänderungen. Um dieses Problem zu beheben:
-
Vorbereitete Anweisungen bevorzugen: Vorbereitete Anweisungen verarbeiten die Zeichenkodierung korrekt und sind im Allgemeinen sicherer.
-
Verwenden Sie mysql_set_charset (falls verfügbar). ): Diese neuere Funktion ermöglicht sichere Codierungsänderungen ohne die in mysql_real_escape_string() vorhandene Schwachstelle.
-
Zeichencodierungsoptionen einschränken: Beschränken Sie die Zeichencodierungen, die von Ihrer Anwendung verwendet werden können Vermeiden Sie Schwachstellen.
-
Seien Sie vorsichtig mit UTF-8: Während UTF-8 im Allgemeinen sicher ist, können böswillige Benutzer versuchen, Randfälle auszunutzen und sollten überwacht werden.
Das obige ist der detaillierte Inhalt vonHier sind einige Titeloptionen, die das Frage-und-Antwort-Format berücksichtigen und das Kernthema hervorheben:
Option 1 (direkt und spezifisch):
* Kann mysql_real_escape_string() vor SQL Inj schützen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!