Sind mysql_real_escape_string() und mysql_escape_string() für die Anwendungssicherheit ausreichend?
Trotz Angesichts der Verbreitung dieser Funktionen zur Bereinigung von Benutzereingaben bestehen weiterhin Bedenken hinsichtlich ihrer Einschränkungen beim Schutz vor SQL-Angriffen und potenziellen Exploits.
SQL-Injections bleiben eine Bedrohung:
mysql_real_escape_string( ) soll in erster Linie Standard-SQL-Injections verhindern. Es bietet jedoch nur begrenzten Schutz vor fortgeschrittenen Injektionstechniken.
Bedenken Sie diesen Code:
$sql = "SELECT * FROM users WHERE username = '" . mysql_real_escape_string($username) . "'";
Ein Angreifer könnte dennoch eine Injektion ausführen, indem er Tabellen- oder Spaltennamen ausnutzt, wie in:
$username = "'); DROP TABLE users; --";
LIKE SQL-Angriffe:
LIKE SQL-Injections sind hiermit ebenfalls anfällig Funktion. Beispielsweise könnte ein Angreifer:
$data = '%'; $sql = "SELECT * FROM users WHERE username LIKE '" . mysql_real_escape_string($data) . "%'"; # Can retrieve all results
Unicode-Zeichensatz-Exploits:
Charset-Exploits können Angreifern trotz korrekter HTML-Konfiguration umfassende Kontrolle gewähren.
LIMIT-Feld-Exploits:
Es kann auch passieren, dass das LIMIT-Feld maskiert wird Ermöglichen Sie Angreifern den Abruf nicht autorisierter Daten:
$sql = "SELECT * FROM users LIMIT '" . mysql_real_escape_string($limit) . "'"; # Can retrieve all results
Vorbereitete Anweisungen als robuste Alternative:
Die ideale Lösung für die Datenbanksicherheit ist die Verwendung vorbereiteter Anweisungen. Vorbereitete Anweisungen führen SQL-Abfragen auf der Serverseite aus und verhindern so die Ausführung unerwarteter SQL-Anweisungen. Betrachten Sie dieses Beispiel:
$statement = $pdo->prepare("SELECT * FROM users WHERE username = ?"); $statement->execute(array($username));
Durch die Verwendung vorbereiteter Anweisungen nutzen Sie die Schutzmechanismen des SQL-Servers und sind vor bekannten und unbekannten Exploits geschützt.
Das obige ist der detaillierte Inhalt vonReichen „mysql_real_escape_string()' und „mysql_escape_string()' aus, um SQL-Injection-Angriffe zu verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!