Maison  >  Article  >  développement back-end  >  `mysql_real_escape_string` est-il une défense fiable contre l'injection SQL ?

`mysql_real_escape_string` est-il une défense fiable contre l'injection SQL ?

DDD
DDDoriginal
2024-10-26 05:00:31714parcourir

Is `mysql_real_escape_string` a Reliable Defense Against SQL Injection?

Les inconvénients de mysql_real_escape_string

Bien que mysql_real_escape_string fournisse une forme de filtrage des données d'entrée pour empêcher les attaques par injection SQL, ses limites méritent attention.

Concaténation de requêtes :
Comme mentionné, la concaténation de requêtes à l'aide de mysql_real_escape_string ne protège pas entièrement contre l'injection SQL. Prenons l'exemple suivant :

mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));

Une entrée telle que "5 OR 1=1" peut contourner les protections fournies par mysql_real_escape_string en raison d'une utilisation incorrecte, en traitant une valeur numérique comme une chaîne.

Portée étroite :
mysql_real_escape_string est conçu spécifiquement pour modifier les valeurs de chaîne destinées à être incluses dans des chaînes entre guillemets dans une instruction SQL.

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

S'il est utilisé en dehors de ce contexte étroit, mysql_real_escape_string peut par inadvertance créer des erreurs de syntaxe ou des vulnérabilités XSS.

Différences de jeu de caractères :
Une définition incorrecte du codage de la connexion à la base de données peut introduire des vulnérabilités. L'utilisation de mysql_query("SET NAMES 'utf8'", $link) pour définir le codage des caractères peut entraîner des écarts entre la façon dont l'API mysql_ gère les chaînes et la façon dont la base de données les interprète.

Implémentation incorrecte :
mysql_real_escape_string est sujet à une utilisation incorrecte, telle que :

  • L'appliquer à des valeurs non placées entre guillemets
  • L'inclure dans la requête SQL elle-même
  • L'interpréter mal en remplacement des instructions préparées

Bien que mysql_real_escape_string puisse fournir une protection contre les attaques par injection lorsqu'il est utilisé correctement, il est recommandé d'adopter des techniques plus robustes, telles que les instructions préparées, pour garantir une sécurité complète.

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