Maison >base de données >tutoriel mysql >Pourquoi mysql_real_escape_string est-il insuffisant pour empêcher l'injection SQL ?
Inconvénients de mysql_real_escape_string : utilisation incorrecte et portée limitée
La fonction mysql_real_escape_string a été critiquée pour offrir une protection incomplète contre les attaques par injection SQL. Bien qu'il échappe efficacement aux chaînes destinées à être utilisées dans les guillemets des instructions SQL, une application correcte est cruciale.
L'un des principaux inconvénients est la gestion incorrecte des valeurs numériques. Si mysql_real_escape_string est appliqué à une valeur numérique, elle conservera sa nature numérique et restera vulnérable aux attaques par injection. Par exemple :
mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
Avec l'entrée "5 OR 1=1", l'attaque par injection réussit car mysql_real_escape_string ne convertit pas l'entrée en chaîne.
Un autre inconvénient est la portée limitée de mysql_real_escape_string. Il est uniquement destiné à échapper des chaînes entre guillemets d'instructions SQL. S'il est appliqué dans d'autres contextes, tels que l'affectation de variables ou la concaténation, il peut introduire par inadvertance des vulnérabilités.
Un encodage incorrect de la connexion à la base de données présente également un risque. L'utilisation de la commande mysql_query("SET NAMES 'utf8'") pour définir le codage contourne l'API mysql_, ce qui peut conduire à des interprétations de chaînes incompatibles entre le client et la base de données. Cela peut faciliter les attaques par injection SQL impliquant des chaînes multi-octets.
Il est important de noter que mysql_real_escape_string ne présente pas de vulnérabilités d'injection fondamentales lorsqu'il est utilisé correctement. Cependant, sa portée étroite et sa vulnérabilité à une application incorrecte en font une option moins fiable pour le développement de logiciels modernes. Les instructions préparées ou les mécanismes de liaison de paramètres associés à des interfaces de langage sécurisées offrent une protection plus robuste contre les attaques par injection SQL.
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!