Maison > base de données > tutoriel mysql > Pourquoi mysql_real_escape_string est-il insuffisant pour empêcher l'injection SQL ?

Pourquoi mysql_real_escape_string est-il insuffisant pour empêcher l'injection SQL ?

DDD
Libérer: 2024-12-02 07:36:17
original
876 Les gens l'ont consulté

Why is mysql_real_escape_string Insufficient for Preventing SQL Injection?

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));
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal