In diesem Artikel wird der Unterschied zwischen der Verwendung von mysql_real_escape_string zum Sortieren und Verarbeiten von vom Benutzer übermittelten Daten und der Verwendung von drei ähnlichen Funktionen vorgestellt: addslashes und mysql_escape_string. Escaped-Daten können direkt in die Datenbank eingefügt werden.
Dies ist eine gute Erklärung für den Unterschied zwischen Addslashes und mysql_real_escape_string. Obwohl viele inländische PHP-Programmierer immer noch Addslashes verwenden, um SQL-Injection zu verhindern (mich eingeschlossen), empfehle ich dennoch jedem, die Überprüfungen zu verstärken, um SQL-Injection auf Chinesisch zu verhindern. Das Problem mit Addslashes besteht darin, dass Hacker 0xbf27 verwenden können, um einfache Anführungszeichen zu ersetzen, während Addslashes nur 0xbf27 in 0xbf5c27 ändern, was zu einem gültigen Multibyte-Zeichen wird. 0xbf5c wird weiterhin als einfaches Anführungszeichen betrachtet, sodass Addslashes nicht erfolgreich abgefangen werden können.
Addslashes sind natürlich nicht nutzlos. Für die Verarbeitung von Einzelbyte-Zeichenfolgen verwenden Sie mysql_real_escape_string.
Zusätzlich zum Beispiel von get_magic_quotes_gpc im PHP-Handbuch:
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} anders {
$lastname = $_POST['lastname'];
}
Überprüfen Sie am besten $_POST['lastname'], wenn magic_quotes_gpc bereits geöffnet ist.
Lassen Sie uns über den Unterschied zwischen den beiden Funktionen mysql_real_escape_string und mysql_escape_string sprechen:
mysql_real_escape_string kann nur verwendet werden, wenn (PHP 4 >= 4.3.0, PHP 5). Andernfalls können Sie nur mysql_escape_string verwenden. Der Unterschied zwischen den beiden ist:
mysql_real_escape_string berücksichtigt den aktuellen Zeichensatz der Verbindung, mysql_escape_string hingegen nicht.
Zusammenfassend:
addslashes() ist ein erzwungener Zusatz;
mysql_real_escape_string() bestimmt den Zeichensatz, aber es gibt Anforderungen für die PHP-Version,
die den aktuellen Zeichensatz der Verbindung nicht berücksichtigt.