Maison > Article > développement back-end > mysql_real_escape_string est-il suffisant pour empêcher l'injection SQL ?
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 :
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!