Sind MySql_real_escape_string() und mysql_escape_string() für die App-Sicherheit ausreichend? Bewertung potenzieller Schwachstellen
Trotz ihrer häufigen Verwendung schützen mysql_real_escape_string() und mysql_escape_string() Datenbanken möglicherweise nicht vollständig vor SQL-Angriffen, wodurch sie anfällig für verschiedene böswillige Exploits sind.
SQL-Injection-Angriffe
Entgegen der landläufigen Meinung mysql_real_escape_string() kann SQL-Injections nicht in allen Szenarien verhindern. Es maskiert effektiv variable Daten, schützt Tabellennamen, Spaltennamen oder LIMIT-Felder jedoch nicht vor böswilliger Manipulation. Diese Einschränkung kann von Angreifern ausgenutzt werden, um Abfragen wie die folgenden zu erstellen:
$sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);
Ein erfahrener Hacker könnte diese Escape-Funktionen immer noch umgehen, indem er die Feld- oder Wertvariablen manipuliert, um eine böswillige Abfrage zu erstellen.
LIKE SQL-Angriffe
LIKE SQL-Angriffe können auch mysql_real_escape_string() umgehen Schutzmaßnahmen. Bei Anfragen mit LIKE „$data%“-Anweisungen könnte ein Angreifer eine leere Zeichenfolge als Eingabe bereitstellen, um alle Datensätze abzugleichen, wodurch möglicherweise vertrauliche Informationen wie Kreditkartennummern preisgegeben werden.
Charset Exploits
Charset-Exploits bleiben eine Bedrohung, insbesondere im Internet Explorer. Durch die Ausnutzung von Zeichensatzunterschieden zwischen der Datenbank und dem Webbrowser können Angreifer bösartige Abfragen ausführen, die die vollständige Kontrolle über den SQL-Server erlangen.
LIMIT-Exploits
LIMIT-Exploits erlauben Angreifer können die LIMIT-Klausel einer SQL-Abfrage manipulieren und damit mehrere Abfragen zusammenführen und nicht autorisierte Befehle ausführen.
Vorbereitete Anweisungen als robuste Verteidigung
Um diese Schwachstellen zu bekämpfen und eine effektive App-Sicherheit zu gewährleisten, erweisen sich vorbereitete Erklärungen als bevorzugter Verteidigungsmechanismus. Vorbereitete Anweisungen verwenden serverseitige Validierung, um nur autorisierte SQL-Anweisungen auszuführen, und bieten so einen proaktiven Schutz gegen bekannte und unbekannte Exploits.
Codebeispiel für die Verwendung vorbereiteter Anweisungen
$pdo = new PDO($dsn); $column = 'url'; $value = 'http://www.stackoverflow.com/'; $limit = 1; $validColumns = array('url', 'last_fetched'); // Validate the $column parameter if (!in_array($column, $validColumns)) { $column = 'id'; } $statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' . 'WHERE ' . $column . '=? ' . 'LIMIT ' . intval($limit)); $statement->execute(array($value)); while (($data = $statement->fetch())) { }
Fazit
Während mysql_real_escape_string() und mysql_escape_string() bietet einen gewissen Schutz vor SQL-Angriffen, sie sind jedoch nicht narrensicher. Die Implementierung vorbereiteter Anweisungen ist eine umfassendere und robustere Lösung, die Anwendungen vor einer Vielzahl von Schwachstellen schützt und so eine bessere App-Sicherheit gewährleistet.
Das obige ist der detaillierte Inhalt vonReichen „mysql_real_escape_string()' und „mysql_escape_string()' aus, um meine App vor SQL-Injection zu schützen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!