„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Kann SQL Injection Bypass `mysql_real_escape_string ()` Aufgrund von Zeichen -Codierungsproblemen?

Kann SQL Injection Bypass `mysql_real_escape_string ()` Aufgrund von Zeichen -Codierungsproblemen?

Gepostet am 2025-02-20
Durchsuche:695

Can SQL Injection Bypass `mysql_real_escape_string()` Due to Character Encoding Issues?

verwenden das charaktercodierende Problem, um die SQL -Injektion von mysql_real_escape_string ()

zu umgehen

Obwohl die mysql_real_escape_string () die SQL -Injektion verhindert, kann sie in bestimmten Fällen umgangen werden.

Betrachten Sie den folgenden PHP -Code:

$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));

$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";

Dieser Code scheint sicher zu sein, kann aber aufgrund des Edge -Falls von Charakter -Set -Codierung ausgenutzt werden.

Angriffsmethode:

Angriffe hängen von den folgenden Schritten ab:

  1. set charakteret set: wählen Sie eine Encodierung (zum Beispiel gbk), wobei dieselbe Byte-Sequenz beide Nicht-ASCII-Zeichen und ASCII-Backslash ('\') darstellt.
  2. konstruieren Sie die Nutzlast: Verwenden Sie eine sorgfältig konstruierte Nutzlast, die ungültige Multibyte -Zeichen enthält, um sicherzustellen, dass das letzte Byte einen ASCII -Backslash darstellt.
  3. call mysql_real_escape_string () : Client glaubt, dass die Verbindung eine andere Zeichenset verwendet (zum Beispiel latein1), also mysql_real_esescape_string () wird ledig sein. Fügen Sie vor den Zitaten einen Backslash ein, was zu einer syntaktisch gültigen Zeichenfolge führt.
  4. Abfrage einreichen: Die entkommene Nutzlast wird Teil der SQL -Anweisung, sodass der Angreifer den erwarteten Schutz umgehen kann.

Arbeitsprinzip:

Das Schlüsselproblem ist, dass der vom Server erwartete Zeichensatz nicht mit dem vom Client berücksichtigten Zeichen entspricht. Obwohl mysql_real_escape_string () basierend auf der vom Client festgelegten Verbindungscodierung entkommen wird, behandelt es in einigen Fällen ungültige Multibyte -Zeichen als einzelnes Byte, einschließlich der Verwendung von Namen anstelle von . mysql_set_charset () case.

als Ergebnis:

Dieser Angriff kann die simulierte Vorverarbeitungserklärung von PDO umgehen, auch wenn die simulierte Vorverarbeitungsanweisung deaktiviert ist.

Abhilfe:

Verwenden Sie nicht versicherbare Zeichensätze wie UTF8MB4 oder UTF8, um dieses Problem zu mildern. Aktivieren Sie den SQL -Modus von NO_BACKSLASH_ESCAPES.

sicheres Beispiel:

setzen Sie das Zeichen immer korrekt mit mysql_set_charset () oder PDOs DSN -Zeichen -Set -Parametern. Echte Vorverarbeitungsaussagen in MySQLI sind ebenfalls immun gegen diesen Angriff.

abschließend:

Während mysql_real_escape_string () bietet normalerweise einen starken Schutz, es ist wichtig, solche potenziellen Randfälle zu bewusst, um eine vollständige Verteidigung gegen SQL -Injektion zu gewährleisten.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3