61
Malveillance informatique
Chapitre 3
Injection SQL
L’attaque par injection SQL vise les sites Web qui proposent des transactions mal
construites dont les résultats sont emmagasinés dans une base de données relationnelle. Elle consiste en ceci : SQL est un langage qui permet d’interroger et
de mettre à jour une base de données relationnelle ; les requêtes sont soumises au
moteur de la base en format texte, sans être compilées. Une requête typique est
construite à partir de champs de formulaire remplis par l’internaute. Si l’auteur du
site a été paresseux, il aura construit ses requêtes en insérant directement les textes
rédigés par l’internaute, sans en contrôler la longueur ni le format ni le contenu.
Ainsi, un utilisateur malveillant informé de cette faille (ou qui la soupçonnerait)
peut confectionner un texte tel qu’une fois incorporé à une requête SQL il ait des
effets indésirables sur la base de données, par exemple en y insérant directement
des ordres du langage, de telle sorte qu’ils soient interprétés. En voici un exemple ;
l’instruction suivante construit directement à partir du nom introduit par l’utilisateur une requête SQL innocente, qui extrait de la base des utilisateurs tous les
enregistrements qui concernent celui-là en particulier :
requete := " SELECT * FROM clients
WHERE nom = ’" + nom_client + " ’;"
Soit un attaquant informé de cette faille, qui au lieu d’entrer dans le formulaire un
nom valide, introduit la chaîne de caractères suivante :
x’ ; DROP TABLE clients ; SELECT * FROM data WHERE nom LIKE ’%" as "nom_client
La requête sera :
SELECT * FROM clients WHERE nom = ’x ’; DROP TABLE clients ;
SELECT * FROM secrets WHERE nom LIKE ’%’;
avec, comme résultat, la destruction pure et simple de la table clients et un accès
imprévu à la table secrets, dont le nom suggère qu’elle n’est pas destinée à être
lue par les internautes.
La parade à ce type d’attaque consiste essentiellement à écrire des programmes
moins naïfs, qui vérifient les données introduites par les utilisateurs avant de les
utiliser, et en particulier qui éliminent les caractères qui ont une valeur sémantique spéciale pour SQL. Cette recommandation vaut d’ailleurs pour tous les programmes.
Malveillance informatique
Chapitre 3
Injection SQL
L’attaque par injection SQL vise les sites Web qui proposent des transactions mal
construites dont les résultats sont emmagasinés dans une base de données relationnelle. Elle consiste en ceci : SQL est un langage qui permet d’interroger et
de mettre à jour une base de données relationnelle ; les requêtes sont soumises au
moteur de la base en format texte, sans être compilées. Une requête typique est
construite à partir de champs de formulaire remplis par l’internaute. Si l’auteur du
site a été paresseux, il aura construit ses requêtes en insérant directement les textes
rédigés par l’internaute, sans en contrôler la longueur ni le format ni le contenu.
Ainsi, un utilisateur malveillant informé de cette faille (ou qui la soupçonnerait)
peut confectionner un texte tel qu’une fois incorporé à une requête SQL il ait des
effets indésirables sur la base de données, par exemple en y insérant directement
des ordres du langage, de telle sorte qu’ils soient interprétés. En voici un exemple ;
l’instruction suivante construit directement à partir du nom introduit par l’utilisateur une requête SQL innocente, qui extrait de la base des utilisateurs tous les
enregistrements qui concernent celui-là en particulier :
requete := " SELECT * FROM clients
WHERE nom = ’" + nom_client + " ’;"
Soit un attaquant informé de cette faille, qui au lieu d’entrer dans le formulaire un
nom valide, introduit la chaîne de caractères suivante :
x’ ; DROP TABLE clients ; SELECT * FROM data WHERE nom LIKE ’%" as "nom_client
La requête sera :
SELECT * FROM clients WHERE nom = ’x ’; DROP TABLE clients ;
SELECT * FROM secrets WHERE nom LIKE ’%’;
avec, comme résultat, la destruction pure et simple de la table clients et un accès
imprévu à la table secrets, dont le nom suggère qu’elle n’est pas destinée à être
lue par les internautes.
La parade à ce type d’attaque consiste essentiellement à écrire des programmes
moins naïfs, qui vérifient les données introduites par les utilisateurs avant de les
utiliser, et en particulier qui éliminent les caractères qui ont une valeur sémantique spéciale pour SQL. Cette recommandation vaut d’ailleurs pour tous les programmes.
