Les attaques par injection de commandes SQL
sont des attaques visant les sites web s'appuyant sur des bases de données relationnelles.
Dans ce type de sites, des paramètres sont passés à
la base de données sous forme d'une requête SQL.
Ainsi, si le concepteur n'effectue aucun contrôle sur les paramètres passés
dans la requête SQL, il est possible à un pirate de modifier la requête afin
d'accéder à l'ensemble de la base de données, voire à en modifier
le contenu.
En effet, certains caractères permettent d'enchaîner plusieurs
requêtes SQL ou bien ignorer la suite de la requête. Ainsi, en insérant ce type
de caractères dans la requête, un pirate peut potentiellement exécuter
la requête de son choix.
Soit la requête suivante, attendant comme paramètre un nom d'utilisateur :
SELECT * FROM utilisateurs WHERE nom="$nom";
Il suffit à un pirate de saisir un nom tel que
« toto" OR 1=1 OR nom ="titi » pour que la
requête devienne la suivante :
SELECT * FROM utilisateurs WHERE nom="toto" OR 1=1 OR nom ="titi";
Ainsi, avec la requête ci-dessus, la clause WHERE est toujours
réalisée, ce qui signifie qu'il retournera les enregistrements correspondant
à tous les utilisateurs.
De plus, certains systèmes de gestion de bases de données
tel que Microsoft SQL Server possèdent des procédures stockées
permettant de lancer des commandes d'administration. Ces procédures stockées
sont potentiellement dangereuses dans la mesure où elles peuvent permettre à
un utilisateur malintentionné d'exécuter des commandes du système,
pouvant conduire à une éventuelle intrusion.
Un certain nombre de règles permettent de se prémunir des attaques par injection
de commandes SQL :
- Vérifier le format des données saisies et notamment la présence de
caractères spéciaux ;
- Ne pas afficher de messages d'erreur explicites affichant la requête ou une partie de la
requête SQL.
- Supprimer les comptes utilisateurs non utilisées, notamment les comptes par défaut ;
- Eviter les comptes sans mot de passe ;
- Restreindre au minimum les privilèges des comptes utilisés ;
- Supprimer les procédures stockées ;
|