Les Cas types de cybersécurité(Injection SQL)
L’injection
SQL est devenue un problème courant qui affecte les sites Web exploitant des
bases de données. Elle se produit lorsqu’un malfaiteur exécute une requête SQL
sur la base de données via les données entrantes du client au serveur. Des
commandes SQL sont insérées dans la saisie du plan de données (par exemple, à
la place du nom d’utilisateur ou du mot de passe) afin d’exécuter des commandes
SQL prédéfinies. Un exploit d’injection SQL réussi peut lire les données
sensibles de la base de données, modifier (insérer, mettre à jour ou supprimer)
les données de la base de données, exécuter des opérations d’administration de
la base de données (par exemple la fermer), récupérer le contenu d’un fichier
spécifique, et, dans certains cas, envoyer des commandes au système
d’exploitation.
Par
exemple, le formulaire Web d’un site Web peut demander le nom de compte d’un
utilisateur, puis l’envoyer à la base de données afin d’extraire les
informations de compte associées à l’aide de SQL dynamique, comme ceci :
“SELECT
* FROM users WHERE account = ‘“ + userProvidedAccountNumber +”’;”
Même
si cela fonctionne pour les utilisateurs qui saisissent correctement leur
numéro de compte, cela laisse un passage aux attaquants. Si, par exemple,
quelqu’un décidait de fournir un numéro de compte “‘ or ‘1’ = ‘1’”, cela
donnerait une chaîne de requête comme celle-ci :
“SELECT
* FROM users WHERE account = ‘’ or ‘1’ = ‘1’;”
Puisque
‘1’ = ‘1’ est toujours évalué comme TRUE, la base de données renvoie les
données de tous les utilisateurs au lieu d’un seul.
La
vulnérabilité à ce type d’attaque informatique est liée au fait que SQL ne fait
aucune distinction réelle entre le plan de contrôle et le plan de données. Pour
cette raison, les injections SQL fonctionnent surtout si un site Web utilise
SQL dynamique. De plus, les injections SQL sont très courantes avec les
applications PHP et ASP en raison de la prévalence des anciennes interfaces
fonctionnelles. Les applications J2EE et ASP.NET sont moins sensibles aux
injections SQL en raison de la nature des interfaces programmatiques
disponibles.
Afin
de vous protéger contre les attaques par injection SQL, appliquez le modèle
d’autorisation « least0privilege » à vos bases de données. Respectez les
procédures stockées (assurez-vous que ces procédures n’incluent pas de SQL
dynamique) et les instructions préparées (requêtes paramétrées). Le code
exécuté sur la base de données doit être suffisamment fort pour prévenir les
attaques par injection. Par ailleurs, validez les données saisies au niveau de
l’application à l’aide d’une liste blanche.
- Commentaires