PHP addslashes()
et sa vulnérabilité d'injection SQL
La fonction PHP addslashes()
, souvent utilisée comme protection contre les attaques par injection SQL, possède des limitations qui peuvent compromettre la sécurité, notamment lorsqu'il s'agit de caractères multi-octets. Cet article examine les scénarios dans lesquels addslashes()
ne parvient pas à fournir une protection adéquate.
Problèmes d'encodage de caractères multioctets
Lorsque les données d'entrée incluent des caractères multi-octets, addslashes()
peut insérer de manière incorrecte des barres obliques inverses, perturbant la séquence d'échappement et créant des vulnérabilités. Cela se produit car addslashes()
pourrait ne pas gérer avec précision le codage des caractères multi-octets.
Exemple illustratif :
<code class="language-php">$input = "⭐' OR 1=1 --"; $escapedInput = addslashes($input); // Escapes as ⭐\' OR 1=1 --</code>
Ici, le guillemet simple suivant le caractère étoile multi-octets reste sans échappement, laissant le système ouvert à l'injection SQL.
Vulnérabilités spécifiques au codage
Le problème vient de l'incapacité potentielle de addslashes()
à interpréter correctement les codages de caractères multi-octets tels que EUC-JP ou Shift-JIS. Certaines séquences de caractères dans ces encodages peuvent contenir un octet de fin 0x5c, induisant en erreur addslashes()
la création d'un caractère multi-octets au lieu d'échapper au guillemet simple.
Bonnes pratiques : aller au-delà addslashes()
Bien que addslashes()
offre une protection de base, ce n'est pas une solution fiable pour empêcher l'injection SQL, en particulier avec les jeux de caractères multi-octets. Pour une sécurité renforcée, utilisez des techniques plus avancées telles que mysqli_real_escape_string()
(pour MySQLi) ou, idéalement, des instructions préparées. Les instructions préparées sont l'approche recommandée pour prévenir les vulnérabilités d'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!