Qu’est-ce qu’une injection SQL et comment se protéger de cette attaque ?
Temps de lecture : 3 mn
L'injection SQL, ou faille SQLi, est une cyberattaque réputée. Sa capacité à exploiter des failles de
sécurité peut être très puissante si elle est bien exploitée.
Injection SQL : définition
Les attaques par injection de commandes SQL exploitent les failles de sécurité d’une application qui
interagit avec des bases de données. L’attaque SQL consiste à modifier une requête SQL en cours par
l’injection d’un morceau de requête non prévu, souvent par le biais d’un formulaire. Le hacker peut ainsi
accéder à la base de données, mais aussi modifier le contenu et donc compromettre la sécurité du système.
Différents types d’injection SQL
- Le type d’injection blind based injecte des morceaux qui vont retourner caractère par caractère ce que
l'attaquant cherche à extraire de la base de données. Ce type d’injection dépend de la réponse du
serveur : soit la requête d’origine revoie le même résultat et indique que le caractère est valide, soit
elle ne renvoie pas le même résultat et signifie que le caractère testé n'est pas le bon.
- La méthode error based injecte des morceaux qui retournent champ par champ ce que le hacker cherche à
extraire de la base de données. Ce type d’injection profite utilise une faiblesse de la base de données
et ainsi détourne le message d'erreur qu’elle génère.
- L’injection SQL union based injecte des morceaux qui vont retourner un ensemble de données directement
extraites de la base de données. Ce type d’injection peut dans les cas les plus extrêmes récupérer des
tables entières de base de données en une ou deux requêtes ! Mais, en général, cette méthode retourne
entre 10 et 100 lignes de la base de données par requête SQL détournée.
- la méthode Stacked queries est l’attaque la plus dangereuse. En raison d’une erreur de configuration du
serveur de base de données, ce type d’injection peut exécuter n'importe quelle requête SQL sur le
système ciblé. Non seulement elle récupère des données, mais elle peut aussi des données directement
dans la base de données, par injection d’une autre requête SQL.