SQL-Injection-Exploits durch addslashes() in PHP
Die Funktion addslashes() von PHP ist bekanntermaßen weniger sicher als mysql_real_escape, wenn es darum geht Verhinderung von SQL-Injection-Schwachstellen. Obwohl addslashes() oft wegen seiner Einschränkungen kritisiert wird, ist es wichtig zu verstehen, wie es zu erfolgreichen Angriffen führen kann.
Beispielszenario
Betrachten Sie den folgenden Code als Versuch zur Bereinigung Benutzereingabe:
$input = addslashes($_GET['input']); $query = "SELECT * FROM users WHERE username='$input'";
Das Problem mit diesem Code besteht darin, dass addslashes() keine Multibyte-Zeichen verarbeitet richtig. Wenn ein Angreifer einen Benutzernamen angibt, der ein Multibyte-Zeichen enthält, das mit dem Backslash()-Zeichen endet, fügt addslashes() einen Backslash in die Mitte der Sequenz ein und bricht so deren Gültigkeit. Dies kann dazu führen, dass der Backslash als Escape-Zeichen innerhalb der SQL-Abfrage interpretiert wird, anstatt das folgende einfache Anführungszeichen zu maskieren.
Ein Beispiel für eine böswillige Eingabe, die diese Sicherheitslücke ausnutzen könnte, ist:
%E4%B8%80' OR 1=1 --
addslashes() würde dies umwandeln in:
%E4%B8%80\' OR 1=1 --
Der maskierte Backslash () wird nun zu einem gültigen Teil der Multibyte-Sequenz, was Folgendes ermöglicht Der Angreifer kann beliebige SQL-Befehle ausführen (in diesem Fall, um die Authentifizierung zu umgehen).
Allgemeiner Vorbehalt
Die Sicherheitslücke entsteht, weil addslashes() dazu verleitet werden kann, einen zu erstellen gültiges Multibyte-Zeichen, anstatt ein folgendes einfaches Anführungszeichen zu maskieren. Dies tritt auf, wenn die verwendete Zeichenkodierung ein gültiges Multibyte-Zeichen enthält, das mit 0x5c (dem Hexadezimalcode für das Backslash-Zeichen) endet. Während UTF-8 diese Bedingung nicht erfüllt, ist dies bei anderen Kodierungen wie Latin1 der Fall. Daher ist es wichtig, sich dieser potenziellen Schwachstelle bewusst zu sein, wenn addslashes() zur Eingabebereinigung verwendet wird, und die Verwendung robusterer Alternativen wie mysql_real_escape in Betracht zu ziehen.
Das obige ist der detaillierte Inhalt vonKann addslashes() in PHP immer noch zu SQL-Injection-Sicherheitslücken führen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!