Maison  >  Article  >  développement back-end  >  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 ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 21:30:29675parcourir

  Is mysql_real_escape_string Enough to Prevent SQL Injection?

Erreurs à éviter avec mysql_real_escape_string

Bien qu'il s'agisse d'une méthode couramment utilisée pour empêcher l'injection SQL, mysql_real_escape_string peut ne pas protéger contre les attaques s'il est mal utilisé . Bien qu'il échappe efficacement les caractères spéciaux dans les valeurs de chaîne, certains scénarios peuvent survenir dans lesquels son efficacité est compromise.

Utilisation correcte : valeurs de chaîne entre guillemets

mysql_real_escape_string ne doit être utilisé que lorsque insertion de contenu textuel entre guillemets dans les instructions SQL. Par exemple :

$value = mysql_real_escape_string($value, $link);
$sql = "... `foo` = '$value' ...";

Utilisations incorrectes

Des applications incorrectes de mysql_real_escape_string peuvent conduire à des vulnérabilités. Les erreurs courantes incluent :

  • L'utiliser dans des contextes non cités (par exemple, ... column_name = $value ...)
  • L'appliquer à des valeurs non-chaînes (par exemple, entrées numériques)
  • Une mauvaise application en dehors des contextes SQL (par exemple, $sql = mysql_real_escape_string("... foo = '$value' ..."))

Considérations sur l'encodage

Un autre écueil est une mauvaise configuration de l'encodage de la connexion à la base de données. La méthode correcte est :

mysql_set_charset('utf8', $link);

Cependant, l'utilisation de mysql_query("SET NAMES 'utf8'", $link) peut entraîner des écarts entre l'encodage supposé de l'API mysql_ et l'encodage réel de la base de données. Cela peut potentiellement permettre des attaques par injection impliquant des chaînes multi-octets.

Conclusion

mysql_real_escape_string reste un outil précieux s'il est utilisé comme prévu. Cependant, reconnaître ses limites et l’appliquer correctement est essentiel pour prévenir les vulnérabilités d’injection SQL. Il est recommandé d'explorer des alternatives plus modernes telles que des déclarations préparées pour une sécurité et une facilité d'utilisation accrues.

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!

Déclaration:
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