Vulnérabilités d'injection MySQL avec mysql_real_escape_string()
Malgré son utilisation généralisée, mysql_real_escape_string() peut ne pas protéger entièrement contre les attaques par injection SQL dans des circonstances spécifiques.
Encodages de caractères asiatiques
Selon JustinShattuck.com, certains encodages de caractères asiatiques peuvent contourner mysql_real_escape_string(), comme le démontre l'exemple utilisant les caractères chinois Big5. Cette vulnérabilité survient lorsque :
- mysql_real_escape_string() est utilisé.
- SET NAMES est utilisé pour basculer le codage de caractères par défaut vers un codage multi-octets.
- Le multi-octet choisi l'encodage autorise les barres obliques inverses ("") comme deuxième, troisième ou octets suivants.
Impact et atténuation
Comme l'explique Stefan Esser, cette vulnérabilité se produit car mysql_real_escape_string() ne prend pas en compte les changements d'encodage provoqués par SET NAMES. Pour résoudre ce problème :
-
Préférez les instructions préparées : Les instructions préparées gèrent correctement le codage des caractères et sont généralement plus sécurisées.
-
Utilisez mysql_set_charset (si disponible ): Cette fonction plus récente permet des modifications d'encodage sécurisées sans la vulnérabilité présente dans mysql_real_escape_string().
-
Limiter les options d'encodage de caractères : Restreindre les encodages de caractères qui peuvent être utilisés par votre application à prévenir les vulnérabilités.
-
Soyez prudent avec UTF-8 : Bien que UTF-8 soit généralement sûr, les utilisateurs malveillants peuvent tenter d'exploiter les cas extrêmes et doivent être surveillé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!