verwenden das charaktercodierende Problem, um die SQL -Injektion von mysql_real_escape_string ()
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:
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. 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.
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