Maison > base de données > tutoriel mysql > mysql_real_escape_string est-il vraiment efficace contre l'injection SQL et quelles sont ses limites ?

mysql_real_escape_string est-il vraiment efficace contre l'injection SQL et quelles sont ses limites ?

Barbara Streisand
Libérer: 2024-11-29 00:19:10
original
465 Les gens l'ont consulté

Is mysql_real_escape_string Truly Effective Against SQL Injection, and What Are Its Limitations?

mysql_real_escape_string : pièges potentiels

La fonction mysql_real_escape_string, destinée à protéger contre les attaques par injection SQL, a fait l'objet d'un examen minutieux pour ses limites. Bien qu'il puisse améliorer la sécurité, certaines lacunes entravent son efficacité.

Utilisation incorrecte et valeurs numériques

Un problème clé est l'application incorrecte de mysql_real_escape_string. Il est conçu uniquement pour échapper les valeurs de chaîne dans les requêtes SQL. Cependant, s'il est appliqué à des valeurs numériques, comme dans l'exemple :

mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
Copier après la connexion

il ne parvient pas à empêcher les attaques telles que :

5 OR 1=1
Copier après la connexion

Insertion de chaîne sans guillemets

Une autre vulnérabilité survient lorsque mysql_real_escape_string est utilisé dans ce qui suit scénario :

$sql = "... `foo` = $value ...";
Copier après la connexion

Ici, l'entrée est insérée sans échappement ni citation appropriés, permettant des attaques par injection SQL. De même, si elle est appliquée à une variable, comme :

$sql = "... `$value` ...";
Copier après la connexion

la vulnérabilité persiste.

Conflits d'encodage de connexion à la base de données

De plus, des incohérences entre les l'encodage défini dans l'API mysql_ et la base de données peut créer des vulnérabilités. Définir l'encodage de la base de données à l'aide d'une mauvaise méthode, telle que :

mysql_query("SET NAMES 'utf8'", $link);
Copier après la connexion

peut provoquer des incohérences dans l'échappement des chaînes, conduisant à des attaques par injection potentielles.

Conclusion

Bien que mysql_real_escape_string puisse fournir une certaine protection contre les attaques par injection SQL, son cas d'utilisation restreint et sa susceptibilité à une application incorrecte en font un option moins souhaitable. Pour une sécurité plus robuste, les développeurs sont encouragés à explorer des méthodes alternatives, telles que les instructions préparées, qui offrent une meilleure protection contre les vulnérabilités.

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