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"
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]));
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