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));
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!