"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Les `mysql_real_escape_string ()» et `mysql_escape_string ()» sont-ils assez pour empêcher les attaques d'injection MySQL?

Les `mysql_real_escape_string ()» et `mysql_escape_string ()» sont-ils assez pour empêcher les attaques d'injection MySQL?

Publié le 2025-03-22
Parcourir:939

Are `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Prevent MySQL Injection Attacks?

MySql Injection Attacks: une plongée plus profonde

introduction

Assurer la sécurité des applications Web est cruciale, et la protection de la database est une partie vitale de cet effort. Cet article examine l'efficacité de l'utilisation de mysql_real_escape_string () et de mysql_escape_string () dans la sauvegarde contre les attaques SQL. sont couramment utilisés pour échapper aux données avant de les insérer dans des requêtes SQL. Cependant, ces fonctions sont-elles une protection suffisante contre tous les vecteurs d'attaque?

Opinions d'experts

Selon les experts, MySQL_REAL_ESCAPE_STRING () ne fournit pas une protection complète contre les injections SQL. En effet, il est uniquement destiné à échapper aux variables PHP dans les requêtes. Il ne peut pas gérer les noms de table ou de colonnes d'échappement ou de limite. "OÙ " . mysql_real_escape_string ($ field). "=". mysql_real_escape_string ($ value);

Cette requête est vulnérable à l'injection SQL si la valeur $ ou $ contient une entrée malveillante. Un pirate pourrait élaborer une requête malveillante qui contourne l'échappement et exécute des commandes non autorisées. Cela peut exposer tous les enregistrements dans un tableau, potentiellement révélant des informations sensibles.

Charset exploits:

ces exploits tirent parti des vulnérabilités dans Internet Explorer et la manipulation du charme de PHP. Ils peuvent permettre aux pirates d'exécuter des requêtes SQL arbitraires.

Une démonstration

Le code suivant démontre comment ces attaques peuvent être exploitées:
$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);
mysql_real_escape_string ($ argv [1]), mysql_real_escape_string ($ argv [2]), mysql_real_escape_string ($ argv [3]));

entrée 1: renvoie les urls commençant par "http://www.reddit.com"

  • entrée 2: renvoie chaque résultat (un résultat (un résultat (un résultat (un résultat (un résultat (a un résultat (un résultat (un résultat (un résultat (a un résultat (un résultat (a un résultat (un résultat (un résultat (un résultat (un résultat (un résultat (AN Exploit)
  • entrée 3: Exécute des requêtes SQL inattendues

La solution: instructions préparées

Les experts recommandent d'utiliser des instructions préparées au lieu d'éclamer des fonctions. Les instructions préparées sont des techniques côté serveur qui garantissent que seul SQL valide est exécuté. Cette approche fournit une protection complète contre les injections SQL, à la fois connues et inconnues.

$sql = sprintf("SELECT url FROM GrabbedURLs WHERE %s LIKE '%s%%' LIMIT %s",
               mysql_real_escape_string($argv[1]),
               mysql_real_escape_string($argv[2]),
               mysql_real_escape_string($argv[3]));
  • $ sql = 'Sélectionner URL From graredUrls Where'. $ colonne. '=? Limite? '; $ instruction = $ PDO-> Préparer ($ SQL); $ instruction-> EXECUTE (Array ($ value, $ limit)); Ce code utilise des instructions préparées pour échapper à la saisie des utilisateurs et exécuter les requêtes en toute sécurité. Injections, ils ne sont pas suffisants pour une sécurité complète. Les instructions préparées sont l'approche recommandée pour une sécurité de base de données robuste.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3