Aus weiteren Untersuchungen habe ich herausgefunden:
http://dev.mysql.com/doc/refman/5.1/en/news-5-1-11.html
Sicherheitsupdate:
Bei der Multi-Byte-Codierungsverarbeitung wurde eine Sicherheitslücke bei der SQL-Injektion gefunden. Der Fehler befand sich auf dem Server und hat die mit der C-API-Funktion mysql_real_escape_string () maskierte Zeichenfolge falsch analysiert.
Diese Sicherheitsanfälligkeit wurde von Josh Berkus und Tom Lane im Rahmen der projektübergreifenden Sicherheitskooperation des OSDB-Konsortiums entdeckt und gemeldet. Weitere Informationen zur SQL-Injection finden Sie im folgenden Text.
Diskussion. Bei der Multi-Byte-Codierungsverarbeitung wurde eine Sicherheitslücke für die SQL-Injektion gefunden. Eine Sicherheitslücke bei der SQL-Injektion kann eine Situation enthalten, in der der Benutzer möglicherweise SQL-Anweisungen in die Daten einfügt, die der Server ausführen wird, wenn ein Benutzer Daten zum Einfügen in eine Datenbank bereitstellt. In Bezug auf diese Sicherheitsanfälligkeit ist es möglich, das Escapezeichen in einigen Multi-Byte-Zeichensätzen (z. B. SJIS, BIG5 und GBK) zu umgehen, wenn Zeichensatz-unbewusstes Escapezeichen verwendet wird (z. B. Addslashes () in PHP). Infolgedessen kann eine Funktion wie addslashes () SQL-Injection-Angriffe nicht verhindern. Es ist unmöglich, dies auf der Serverseite zu beheben. Die beste Lösung besteht darin, dass Anwendungen die Zeichensatz-fähige Escape-Funktion verwenden, die von einer Funktion wie mysql_real_escape_string () angeboten wird.
Es wurde jedoch ein Fehler festgestellt, wie der MySQL-Server die Ausgabe von mysql_real_escape_string () analysiert. Selbst wenn die Zeichensatz-fähige Funktion mysql_real_escape_string () verwendet wurde, war eine SQL-Injection möglich. Dieser Fehler wurde behoben.
Problemumgehungen. Wenn Sie MySQL nicht auf eine Version aktualisieren können, die die Fehlerbehebung beim Parsen von mysql_real_escape_string () enthält, aber MySQL 5.0.1 oder höher ausführen, können Sie den SQL-Modus NO_BACKSLASH_ESCAPES als Problemumgehung verwenden. (Dieser Modus wurde in MySQL 5.0.1 eingeführt.) NO_BACKSLASH_ESCAPES aktiviert einen SQL-Standardkompatibilitätsmodus, in dem Backslash nicht als Sonderzeichen betrachtet wird. Das Ergebnis ist, dass Abfragen fehlschlagen.
Geben Sie die folgende SQL-Anweisung ein, um diesen Modus für die aktuelle Verbindung festzulegen:
SET sql_mode='NO_BACKSLASH_ESCAPES';
Sie können den Modus auch global für alle Clients festlegen:
SET GLOBAL sql_mode='NO_BACKSLASH_ESCAPES';
Dieser SQL-Modus kann auch automatisch aktiviert werden, wenn der Server mit der Befehlszeilenoption --sql-mode = NO_BACKSLASH_ESCAPES oder durch Festlegen von sql-mode = NO_BACKSLASH_ESCAPES in der Serveroptionsdatei (z. B. my.cnf oder my.ini) gestartet wird , abhängig von Ihrem System). (Fehler # 8378, CVE-2006-2753)
Siehe auch Bug # 8303.