Heim > Backend-Entwicklung > PHP-Tutorial > mysql_real_escape_string() vs. addslashes(): Welche Escape-Funktion bietet besseren SQL-Injection-Schutz?

mysql_real_escape_string() vs. addslashes(): Welche Escape-Funktion bietet besseren SQL-Injection-Schutz?

Susan Sarandon
Freigeben: 2024-10-21 13:02:02
Original
847 Leute haben es durchsucht

mysql_real_escape_string() vs. addslashes(): Which Escaping Function Provides Better SQL Injection Protection?

Die Unterschiede zwischen mysql_real_escape_string() und addslashes() für den SQL-Injection-Schutz verstehen

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.

Charakter-Escape-Unterschiede

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.

SQL-Injection Sicherheitslücke bei addslashes()

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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.

Fazit

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!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage