Heim > Backend-Entwicklung > PHP-Tutorial > Kann SQL-Injection „mysql_real_escape_string()' durch Zeichensatzmanipulation umgehen?

Kann SQL-Injection „mysql_real_escape_string()' durch Zeichensatzmanipulation umgehen?

Patricia Arquette
Freigeben: 2024-12-25 00:00:19
Original
137 Leute haben es durchsucht

Can SQL Injection Bypass `mysql_real_escape_string()` Using Character Set Manipulation?

SQL-Injection, die mysql_real_escape_string() umgeht

Trotz seiner weit verbreiteten Verwendung ist mysql_real_escape_string() nicht immun gegen SQL-Injection-Angriffe.

Der Angriff

Voraussetzung: Die Datenbank Die Verbindung muss einen anfälligen Zeichensatz wie big5, cp932, gb2312, gbk oder sjis verwenden.

Schritte:

  1. Kodierung festlegen: Stellen Sie die Serverkodierung mit SET auf einen anfälligen Zeichensatz ein NAMEN.
  2. Erstellen Sie die Nutzlast:Erstellen Sie eine Nutzlast, die ein ungültiges Multibyte-Zeichen, z. B. 0xbf27, im anfälligen Zeichensatz enthält.
  3. Escape mit mysql_real_escape_string (): Entkommen Sie der Nutzlast mit mysql_real_escape_string(), das einen Backslash vor dem Anfangsbyte einfügt, d. h. 0x27.
  4. Datenbank abfragen: Die maskierte Nutzlast in einer Abfrage verwenden.

Ergebnis: Aufgrund der Nichtübereinstimmung der Client-Server-Codierung enthält die Abfrage a nicht entkommenes einfaches Anführungszeichen, was zu einer erfolgreichen SQL-Injection führte.

The Ugly

Bug in mysql_real_escape_string(): In früheren MySQL-Versionen wurden ungültige Multibyte-Zeichen als einzelne Bytes behandelt zu Escape-Zwecken, auch wenn der Client die Verbindungskodierung kannte.

PDO Sicherheitslücke: Emulierte vorbereitete Anweisungen in PDO werden mit mysql_real_escape_string() erstellt und sind daher anfällig für diesen Angriff.

The Saving Grace

Sichere Praktiken:

  • Verwenden Sie einen nicht anfälligen Zeichensatz wie utf8 oder latin1.
  • Stellen Sie den Zeichensatz sowohl auf dem Client als auch auf dem Server korrekt ein.
  • Deaktivieren Sie emulierte vorbereitete Anweisungen im PDO.

Das obige ist der detaillierte Inhalt vonKann SQL-Injection „mysql_real_escape_string()' durch Zeichensatzmanipulation umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage