MySQL-Sicherheit: Sind mysql_real_escape_string() und mysql_escape_string() angemessen?
Die Wirksamkeit von mysql_real_escape_string() und mysql_escape_string() für die Anwendungssicherheit hat einige Debatten ausgelöst. Diese Funktionen schützen zwar vor bekannten SQL-Injection-Vektoren, ihre Einschränkungen machen Sie jedoch möglicherweise anfällig für fortgeschrittenere Angriffe.
Anfälligkeit für SQL-Injection
Trotz der Verwendung von mysql_real_escape_string() können Sie dies tun in Szenarien, in denen PHP-Variablen in Abfragen integriert sind, immer noch anfällig für SQL-Injections sein. Betrachten Sie zum Beispiel diesen Code:
<code class="php">$sql = "SELECT number FROM PhoneNumbers " . "WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);</code>
Ein raffinierter Hacker könnte diese Abfrage mit der folgenden Eingabe ausnutzen:
<code class="php">$field = "1=1" $value = "1"</code>
Dadurch wird die beabsichtigte Logik umgangen und stattdessen (möglicherweise) alle Datensätze zurückgegeben von denen, die den angegebenen Kriterien entsprechen.
LIKE Angriffe
mysql_real_escape_string() ist bei der Verhinderung von LIKE-Angriffen unwirksam, wie zum Beispiel:
<code class="php">$sql = "SELECT number FROM PhoneNumbers " . "WHERE " . mysql_real_escape_string($field) . " LIKE " . mysql_real_escape_string($value);</code>
Ein böswilliger Benutzer könnte $value auf % setzen, um alle Datensätze abzurufen, wodurch möglicherweise vertrauliche Daten preisgegeben werden .
Charset Exploits
Internet Explorer bleibt selbst im Jahr 2011 anfällig für Charset-Exploits. Diese Schwachstelle kann Angreifern die Kontrolle über Ihre Datenbank gewähren, ähnlich wie SQL-Injections.
Vorbereitete Anweisungen: Ein proaktiver Ansatz
Beides mysql_real_escape_string() und mysql_escape_string() sind angreifbar, da es sich um reaktive Abwehrmechanismen handelt. Vorbereitete Stellungnahmen hingegen bieten eine proaktive Lösung. Indem vorbereitete Anweisungen nur gültiges und programmiertes SQL ausführen, reduzieren sie das Risiko einer unerwarteten SQL-Ausführung erheblich, unabhängig von den Schwachstellen der zugrunde liegenden Datenbank.
Hier ist ein Beispiel für die Verwendung vorbereiteter Anweisungen:
<code class="php">$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' . 'WHERE ' . $column . '=? ' . 'LIMIT ' . intval($limit)); $statement->execute(array($value));</code>
Vorbereitete Anweisungen sind sowohl sicher als auch weniger ausführlich als die Verwendung von mysql_real_escape_string(). Sie verlassen sich auf die Schutzmaßnahmen des Datenbankservers, um sich vor bekannten und unbekannten Bedrohungen zu schützen.
Das obige ist der detaillierte Inhalt vonReichen mysql_real_escape_string() und mysql_escape_string() aus, um MySQL-Anwendungen zu sichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!