Maison > développement back-end > tutoriel php > mysql_real_escape_string() et mysql_escape_string() sont-ils suffisants pour sécuriser les applications MySQL ?

mysql_real_escape_string() et mysql_escape_string() sont-ils suffisants pour sécuriser les applications MySQL ?

Mary-Kate Olsen
Libérer: 2024-11-01 03:03:28
original
1017 Les gens l'ont consulté

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

Sécurité MySQL : mysql_real_escape_string() et mysql_escape_string() sont-elles adéquates ?

L'efficacité de mysql_real_escape_string() et mysql_escape_string() pour la sécurité des applications a suscité un certain débat. Bien que ces fonctions empêchent les vecteurs d'injection SQL connus, leurs limitations peuvent vous rendre vulnérable à des attaques plus avancées.

Susceptibilité aux injections SQL

Malgré l'utilisation de mysql_real_escape_string(), vous pouvez être toujours sensible aux injections SQL dans les scénarios où les variables PHP sont intégrées dans les requêtes. Par exemple, considérons ce code :

<code class="php">$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);</code>
Copier après la connexion

Un pirate informatique sophistiqué pourrait exploiter cette requête avec l'entrée suivante :

<code class="php">$field = "1=1"
$value = "1"</code>
Copier après la connexion

Cela contourne la logique prévue, renvoyant (potentiellement) tous les enregistrements à la place. de ceux correspondant aux critères spécifiés.

Attaques LIKE

mysql_real_escape_string() est inefficace pour empêcher les attaques LIKE, telles que :

<code class="php">$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " LIKE " . mysql_real_escape_string($value);</code>
Copier après la connexion

A Un utilisateur malveillant pourrait définir $value sur % pour récupérer tous les enregistrements, exposant potentiellement des données sensibles.

Exploits de jeu de caractères

Internet Explorer reste vulnérable aux exploits de jeu de caractères, même en 2011. Cette vulnérabilité peut accorder aux attaquants le contrôle de votre base de données, similaire aux injections SQL.

Déclarations préparées : une approche proactive

mysql_real_escape_string() et mysql_escape_string() sont vulnérables car ce sont des mécanismes de défense réactifs. Les déclarations préparées, en revanche, fournissent une solution proactive. En exécutant uniquement du SQL valide et programmé, les instructions préparées réduisent considérablement le risque d'exécution SQL inattendue, quelles que soient les vulnérabilités de la base de données sous-jacente.

Voici un exemple utilisant des instructions préparées :

<code class="php">$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));</code>
Copier après la connexion

Les instructions préparées sont à la fois sécurisées et moins verbeuses que l'utilisation de mysql_real_escape_string(). Ils s'appuient sur les mesures de protection du serveur de base de données pour se prémunir contre les menaces connues et inconnues.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal