PHP- und SQL-Injection-Angriffe [2]
Magic Quotes
Wie oben erwähnt, übermittelt die SQL-Injection hauptsächlich unsichere Daten an die Datenbank, um den Zweck des Angriffs zu erreichen. Um SQL-Injection-Angriffe zu verhindern, verfügt PHP über eine Funktion, die die Eingabezeichenfolge verarbeiten und eine vorläufige Sicherheitsverarbeitung der Eingabe auf der unteren Ebene durchführen kann, nämlich Magic Quotes. (php.ini magic_quotes_gpc). wenn magic_quotes_gpc
Wenn die Option aktiviert ist, wird einfachen Anführungszeichen, doppelten Anführungszeichen und anderen Zeichen in der Eingabezeichenfolge automatisch ein Backslash vorangestellt.
Aber Magic Quotes ist keine sehr universelle Lösung, es blockiert nicht alle potenziell gefährlichen Charaktere und auf vielen Servern ist Magic Quotes nicht aktiviert. Daher müssen wir auch verschiedene andere Methoden verwenden, um die SQL-Injection zu verhindern.
Viele Datenbanken bieten diese Funktionalität zur Eingabedatenverarbeitung nativ an. Beispielsweise verfügt die MySQL-Betriebsfunktion von PHP über eine Funktion namens mysql_real_escape_string(), die Sonderzeichen und Zeichen maskieren kann, die zu Datenbankbetriebsfehlern führen können.
siehe:
http://cn2.php.net/mysql_real_escape_string
Wenn Sie interessiert sind, können Sie die Kommentare unten lesen:)
Schauen Sie sich diesen Code an:
//Wenn die Magic Quotes-Funktion aktiviert ist
if (get_magic_quotes_gpc()) {
$name = stripeslashes($name);
}anders{
$name = mysql_real_escape_string($name);
}
mysql_query("SELECT * FROM users WHERE name='{$name}'");
Beachten Sie, dass wir vor der Verwendung der von der Datenbank bereitgestellten Funktionen feststellen müssen, ob Magic Quotes aktiviert ist, andernfalls genau wie im obigen Beispiel Die Verarbeitung wird zweimal wiederholt. Wenn MQ aktiviert ist, müssen wir das hinzugefügte entfernen, um die echten Daten zu erhalten.
Zusätzlich zur Vorverarbeitung der oben genannten Daten in Zeichenfolgenform sollten Sie beim Speichern von Binärdaten in der Datenbank auch auf die Vorverarbeitung achten. Andernfalls kann es zu Konflikten zwischen den Daten und dem Speicherformat der Datenbank selbst kommen, was zum Absturz der Datenbank, zum Verlust von Datensätzen oder sogar zum Verlust der gesamten Datenbank führen kann. Einige Datenbanken wie PostgreSQL bieten eine Funktion pg_escape_bytea(), die speziell zum Kodieren von Binärdaten verwendet wird und die Daten ähnlich wie Base64 kodieren kann.
wie:
// für die Verwendung von Klartextdaten:
pg_escape_string($regular_strings);
// für die Verwendung von Binärdaten:
pg_escape_bytea($binary_data);
In einem anderen Fall müssen wir auch einen solchen Mechanismus verwenden. Das heißt, Multibyte-Sprachen wie Chinesisch, Japanisch usw. werden vom Datenbanksystem selbst nicht unterstützt. Einige von ihnen verfügen über ASCII-Bereiche, die sich mit binären Datenbereichen überschneiden.
Allerdings kann die Codierung der Daten dazu führen, dass Abfragen wie LIKE abc% fehlschlagen.