Bei der Entwicklung von Webanwendungen ist die Verhinderung von SQL-Injection-Angriffen von entscheidender Bedeutung. Während addslashes() eine häufig verwendete Funktion zum Escapen von Zeichen ist, reicht sie in bestimmten Szenarien nicht aus. Die Funktion mysql_real_escape_string() geht speziell auf diese Einschränkungen ein und verbessert den SQL-Injection-Schutz.
mysql_real_escape_string() maskiert einen breiteren Bereich von Zeichen (x00, n, r, , ', " , und x1a) im Vergleich zu addslashes(), das nur drei Zeichen (' und NUL) maskiert. Diese umfassende Abdeckung stellt sicher, dass Zeichen, die potenziell für die SQL-Injection ausgenutzt werden könnten, ordnungsgemäß maskiert werden, wodurch Schwachstellen minimiert werden.
Trotz der Verwendung von addslashes() bleibt eine Webanwendung anfällig für SQL-Injection, wenn sie sich ausschließlich auf diese Funktion für die Zeichenmaskierung verlässt. Ein Szenario, in dem addslashes() fehlschlägt, ist, wenn eine böswillige Eingabe doppelte Anführungszeichen enthält ("). Diese Anführungszeichen können die bereits in Anführungszeichen gesetzte Zeichenfolge beenden und es dem Angreifer ermöglichen, beliebige SQL-Anweisungen einzufügen.
Zum Beispiel:
<code class="php">$username = addslashes($_POST['username']); $sql = "SELECT * FROM users WHERE username='$username'";</code>
Wenn die Benutzereingabe „John' OR 1='1“ lautet , addslashes() maskiert nur das einfache Anführungszeichen ('), was zu der folgenden SQL-Anweisung führt:
<code class="sql">SELECT * FROM users WHERE username='John\' OR 1=\'1\'</code>
Das doppelte Anführungszeichen (") wird nicht maskiert, sodass der Angreifer die in Anführungszeichen gesetzte Zeichenfolge beenden und anhängen kann zusätzliche SQL-Logik. Infolgedessen gibt die Abfrage alle Benutzer statt nur John zurück, was möglicherweise vertrauliche Informationen gefährdet.
Während addslashes() grundlegende Zeichen-Escape-Funktionen für den SQL-Injection-Schutz bietet, Es reicht nicht aus, Schwachstellen vollständig zu beseitigen. mysql_real_escape_string() überwindet diese Einschränkung, indem es einen größeren Bereich von Zeichen umgeht und Szenarien angeht, in denen addslashes() fehlschlägt. Durch die Verwendung von mysql_real_escape_string() oder die Übernahme parametrisierter Abfragen als überlegene Alternative können Webentwickler dies erheblich verbessern Sicherheit ihrer Anwendungen vor SQL-Injection-Angriffen.
Das obige ist der detaillierte Inhalt vonmysql_real_escape_string() vs. addslashes(): Welche Escape-Funktion bietet besseren SQL-Injection-Schutz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!