Reicht die Verwendung von „mysql_real_escape_string()' und „mysql_escape_string()' aus, um Ihre Anwendung zu sichern?

Mary-Kate Olsen
Freigeben: 2024-11-03 10:58:03
Original
569 Leute haben es durchsucht

Is Using `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure Your Application?

Sind mysql_real_escape_string() und mysql_escape_string() für die App-Sicherheit ausreichend?

Während diese Funktionen einen gewissen Schutz vor SQL-Injection und anderen Angriffen bieten können , sie beheben bestimmte Schwachstellen nicht.

SQL-Injection

Mysql_real_escape_string() kann Ihre Anwendung immer noch einer SQL-Injection aussetzen, wenn Sie PHP-Variablen in Abfragen nicht ordnungsgemäß verarbeiten. Betrachten Sie das folgende Beispiel:

$sql = "SELECT number FROM PhoneNumbers WHERE " . 
        mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  
Nach dem Login kopieren

Diese Abfrage kann von einem Angreifer manipuliert werden, um nicht autorisierte SQL-Anweisungen auszuführen, da mysql_real_escape_string() nicht dafür ausgelegt ist, Tabellennamen, Spaltennamen oder LIMIT-Felder zu sichern.

Like-Angriffe

Mysql_real_escape_string() reicht nicht aus, um LIKE-Exploits zu verhindern. Ein Angreifer könnte einen böswilligen Wert wie „%%“ eingeben, um alle Datensätze zurückzugeben, wodurch möglicherweise vertrauliche Informationen gefährdet werden.

Charset-Exploits

Bestimmte Browser sind möglicherweise für den Zeichensatz anfällig Exploits, die es Angreifern ermöglichen, bösartige Zeichen einzuschleusen, die Escape-Mechanismen umgehen und beliebige SQL-Befehle ausführen.

Vorbereitete Anweisungen: Eine umfassende Lösung

Um Ihre Anwendung effektiv zu sichern, ist es das Es wird empfohlen, vorbereitete Anweisungen anstelle von mysql_real_escape_string() zu verwenden. Vorbereitete Anweisungen führen SQL-Abfragen mit vom Benutzer bereitgestellten Werten aus, indem sie diese als Parameter binden. Dadurch ist kein manuelles Escape erforderlich und es wird sichergestellt, dass nur autorisiertes SQL ausgeführt wird.

Hier ist ein Beispiel für die Verwendung einer vorbereiteten Anweisung in PHP:

$pdo = new PDO($dsn);

$column = 'url';
$value = 'http://www.example.com/';
$limit = 1;

// Validate the search parameter column.
$validColumns = array('url', 'last_fetched');
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())) { }
Nach dem Login kopieren

Vorbereitete Anweisungen bieten einen proaktiven Abwehrmechanismus von Nutzung der Sicherheitsfunktionen des zugrunde liegenden Datenbankservers. Sie sind von Natur aus resistent gegen bekannte und unbekannte Angriffe und gewährleisten so die Integrität Ihrer Daten.

Das obige ist der detaillierte Inhalt vonReicht die Verwendung von „mysql_real_escape_string()' und „mysql_escape_string()' aus, um Ihre Anwendung zu sichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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