Maison >base de données >tutoriel mysql >quelle est la vulnérabilité d'injection SQL
La vulnérabilité d'injection SQL fait référence à l'insertion de commandes SQL saisies de manière malveillante dans les soumissions de formulaires Web ou à la saisie de chaînes de requête pour des noms de domaine ou des demandes de page, incitant finalement le serveur à exécuter des commandes SQL malveillantes
Vulnérabilité d'injection SQL
Comme son nom l'indique, la vulnérabilité d'injection SQL permet aux attaquants d'injecter des entrées malveillantes dans des instructions SQL. Pour bien comprendre ce problème, nous devons d'abord comprendre comment les langages de script côté serveur gèrent les requêtes SQL.
Par exemple, supposons qu'une fonction dans une application Web génère une chaîne à l'aide de l'instruction SQL suivante :
$statement = "SELECT * FROM users WHERE username = 'bob' AND password = 'mysecretpw'";
Cette instruction SQL sera transmise à une fonction qui envoie la chaîne à la base de données A connectée. où il est analysé, exécuté et les résultats renvoyés.
Vous avez peut-être remarqué que cette instruction contient de nouveaux caractères spéciaux :
* : est l'instruction de la base de données SQL pour renvoyer toutes les colonnes de la ligne de base de données sélectionnée
= : est une instruction permettant à la base de données SQL de renvoyer uniquement les valeurs qui correspondent à la chaîne recherchée.
' : est utilisé pour indiquer à la base de données SQL pour rechercher une chaîne Position de début ou de fin
Considérons maintenant l'exemple suivant où un utilisateur d'un site Web peut modifier la valeur de "$user" et "$password", par exemple dans une connexion form :
$statement = "SELECT * FROM users WHERE username = '$user' AND password= '$password'";
Si l'application ne nettoie pas l'entrée, l'attaquant peut facilement insérer n'importe quelle syntaxe SQL spéciale dans l'instruction :
$statement = "SELECT * FROM users WHERE username = 'admin'; -- ' AND password= 'anything'";= 'anything'";
admin'; l'entrée de l'attaquant, qui contient deux nouveaux caractères spéciaux :
: Utilisé pour indiquer à l'analyseur SQL que l'instruction en cours est terminée (pas nécessaire dans la plupart des cas)
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!