Maison > développement back-end > tutoriel php > `mysql_real_escape_string()` empêche-t-il vraiment l'injection SQL ?

`mysql_real_escape_string()` empêche-t-il vraiment l'injection SQL ?

Susan Sarandon
Libérer: 2024-12-27 11:20:12
original
342 Les gens l'ont consulté

Does `mysql_real_escape_string()` Really Prevent SQL Injection?

Mysql_real_escape_string() est-il suffisant pour la prévention des injections SQL ?

Bien que beaucoup pensent que l'utilisation de mysql_real_escape_string() protège contre l'injection SQL, il existe en effet une possibilité de contournement.

Le Défaut

Dans des cas spécifiques, tels que :

mysql_query('SET NAMES gbk');
$var = mysql_real_escape_string("\xbf\x27 OR 1=1 /*");
mysql_query("SELECT * FROM test WHERE name = '$var' LIMIT 1");
Copier après la connexion

Le problème survient en raison d'une inadéquation entre le jeu de caractères attendu du serveur et la perception du client. En utilisant 'SET NAMES' pour modifier le jeu de caractères sur le serveur, mysql_real_escape_string() peut échapper ' comme en ASCII, alors que le serveur l'attend sous forme de texte brut. Cela crée un écart, permettant une suspension libre et des injections.

The Bad

L'émulation par défaut des instructions préparées par PDO peut également conduire à cette faille. La désactivation de l'émulation est recommandée, mais le recours à l'émulation pour les requêtes non prises en charge peut empêcher une protection complète.

The Ugly

Avant MySQL 4.1.20, un bug autorisait les caractères multi-octets non valides. comme ceux vus dans la charge utile, doivent être échappés sous forme d'octets uniques, même avec le jeu de caractères client correct informations.

The Saving Grace

L'utilisation de jeux de caractères imperméables comme utf8mb4 ou utf8, ou l'activation du mode SQL NO_BACKSLASH_ESCAPES, offre une protection contre cette vulnérabilité.

Conclusions

Emploi mysql_real_escape_string() reste efficace dans de nombreuses situations, mais il est crucial d'être conscient des cas extrêmes potentiels. L'utilisation de techniques sécurisées telles que les champs énumérés et les instructions préparées, ainsi que la configuration appropriée du jeu de caractères et du mode, sont essentielles pour une protection complète contre les injections 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
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