SQL-Injections über addslashes() verstehen
In PHP wird addslashes() häufig mit mysql_real_escape_string als Sicherheitsmaßnahme gegen SQL-Injections verglichen. Obwohl beide beim Schutz von Daten hilfreich sein können, zeigen Beispiele, dass addslashes() Ausnutzungen ermöglichen kann.
Eine Methode, mit der ein Angriff erfolgen kann, besteht darin, addslashes() zu manipulieren, um einen Backslash in ein Multibyte-Zeichen einzufügen. Dadurch wird die Schutzfunktion des Backslashs neutralisiert und eine böswillige Abfrage kann erstellt werden.
Betrachten Sie beispielsweise die folgende Abfrage mit addslashes():
$query = "SELECT * FROM users WHERE name = '" . addslashes($_GET['name']) . "'";
Ein Angreifer könnte passieren Folgendes als „Name“-Parameter:
'John Doe' OR 1 = 1 --
Normalerweise wird das einfache Anführungszeichen durch addslashes() maskiert. Allerdings verlässt sich der Angreifer in diesem Fall auf das Multibyte-Zeichen „Ö“. Wenn „Ö“ in UTF-8 kodiert ist, besteht es aus drei Bytes: 0xC3, 0xB6 und 0x9C.
Addslashes() interpretiert die Eingabe des Angreifers als:
'John Doe' ÖR 1 \= 1 --
Mit dem Wenn ein Backslash innerhalb des Multibyte-Zeichens platziert wird, behandelt addslashes() ihn als Fortsetzung des Zeichens und nicht als Escape-Symbol. Folglich wird die SQL-Abfrage nicht ordnungsgemäß maskiert, sodass der Angreifer Sicherheitsmaßnahmen umgehen kann.
Es ist wichtig zu beachten, dass diese Art von Angriff nur für Zeichenkodierungen gilt, bei denen Multibyte-Zeichen vorhanden sind, die mit 0x5c (dem Backslash-Zeichen) enden ). UTF-8 erfüllt dies jedoch nicht, was seine Anfälligkeit für diesen speziellen Angriffsvektor verringert.
Das obige ist der detaillierte Inhalt vonIst addslashes() ein zuverlässiger Schutz gegen SQL-Injection-Angriffe in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!