Heim  >  Artikel  >  Backend-Entwicklung  >  Reichen mysql_real_escape_string() und mysql_escape_string() aus, um MySQL-Anwendungen zu sichern?

Reichen mysql_real_escape_string() und mysql_escape_string() aus, um MySQL-Anwendungen zu sichern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-01 03:03:28995Durchsuche

Are mysql_real_escape_string() and mysql_escape_string() Enough to Secure MySQL Applications?

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!

Stellungnahme:
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