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

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

Mary-Kate Olsen
Libérer: 2024-11-28 22:48:12
original
295 Les gens l'ont consulté

Is mysql_real_escape_string Sufficient to Prevent SQL Injection?

mysql_real_escape_string : limitations et utilisation

Introduction

Bien que mysql_real_escape_string soit souvent utilisé pour se protéger contre Injection SQL, elle présente certaines limitations qui peuvent laisser les applications vulnérable.

Utilisation correcte et limitations

mysql_real_escape_string est destiné à échapper au contenu textuel utilisé comme valeur entre guillemets dans une instruction SQL. Une application incorrecte, par exemple dans des valeurs non citées ou des instructions SQL entières, peut entraîner des risques d'injection.

Valeurs invalides ou incontournables

Les valeurs numériques et les entrées non citées ne peuvent pas être efficacement échappé en utilisant mysql_real_escape_string. Pour les valeurs numériques, la conversion vers le type approprié est recommandée, tandis que les entrées sans guillemets doivent être traitées comme des chaînes dans la requête.

Exemple d'utilisation incorrecte

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

Ceci L'exemple ne protège pas contre l'injection SQL si l'entrée inclut "5 OR 1=1". Il traite l'entrée comme une valeur numérique lors de l'échappement, même si la requête attend une chaîne. Une manipulation correcte implique de placer l'entrée échappée entre guillemets.

Vulnérabilités subtiles

Un autre problème potentiel survient lors de l'utilisation de mysql_query("SET NAMES 'utf8'", $link) pour définissez l'encodage de la connexion à la base de données plutôt que mysql_set_charset('utf8', $link). Cela crée une inadéquation entre le codage supposé de l'API client et l'interprétation de la base de données, conduisant potentiellement à des vulnérabilités d'injection avec des chaînes multi-octets.

Conclusion

mysql_real_escape_string présente des limitations fondamentales, en particulier dans garantir une utilisation correcte. Il est crucial de comprendre son objectif et d’éviter de l’appliquer de manière incorrecte. Pensez à utiliser des méthodes alternatives et plus sécurisées telles que des instructions préparées pour une meilleure protection contre l'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
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