Se rendre au contenu

Injection SQL (SQLi) : comprendre et se protéger

La plupart des applications web s'appuient sur une base de données. Quand une donnée fournie par l'utilisateur sert à construire la requête, un attaquant peut la détourner : c'est l'injection SQL, l'une des failles les plus anciennes et les plus redoutées.

Qu'est-ce qu'une injection SQL ?

Une injection SQL survient lorsqu'une entrée malveillante modifie la requête envoyée par l'application à sa base de données. L'attaquant glisse du code hors des limites prévues pour le champ : dans les cas les plus simples, un guillemet suffit à « sortir » de la saisie attendue et à insérer sa propre logique.

Le terme désigne les attaques contre les bases relationnelles (MySQL, Oracle, SQL Server…) ; les attaques contre les bases non relationnelles sont des injections NoSQL. Quand l'application ne renvoie ni résultat ni message d'erreur exploitable, on parle d' injection SQL aveugle. C'est un grand classique des tests d'intrusion et un pilier de toute démarche de sécurité applicative.

Ce qu'une injection SQL permet

Voler des données sensibles

Identifiants, mots de passe, données personnelles ou bancaires : la SQLi est à l'origine de nombreuses fuites massives de données.

Contourner l'authentification

En détournant la logique de la requête, l'attaquant peut se connecter sans identifiants valides en faisant « toujours vraie » la condition de connexion.

Modifier la base

Au-delà de la lecture, certaines injections permettent d'altérer ou de supprimer des données, voire de désorganiser l'application.

Atteindre le serveur

Avec des privilèges trop permissifs, un attaquant peut lire ou écrire des fichiers sur le serveur, y déposer une porte dérobée et prendre la main sur l'application.

Pourquoi le risque persiste

L'injection SQL est connue depuis des décennies, et pourtant elle reste fréquente. La raison est simple : il suffit d'un seul champ mal contrôlé (un formulaire, un paramètre d'URL, un en-tête) pour ouvrir la brèche. Et plus les privilèges accordés à la base sont larges, plus l'impact est important. Une SQLi réussie sert souvent de point de départ à un vol de compte ou à une intrusion plus profonde.

Le principe de défense : séparer données et code

La parade fondamentale consiste à ne jamais mélanger les données fournies par l'utilisateur et la structure de la requête. C'est le rôle des requêtes paramétrées (ou « préparées ») : la donnée est traitée comme une simple valeur, jamais comme du code exécutable. On y ajoute la validation des entrées, le principe du moindre privilège sur la base et une gestion des erreurs qui ne révèle rien à l'attaquant. Autant de points vérifiés lors d'un test d'intrusion.

Se protéger, étape par étape

1

Utiliser des requêtes paramétrées

La mesure n°1 : des requêtes préparées qui séparent strictement la donnée de la structure SQL, sur l'ensemble des accès à la base.

2

Valider et filtrer les entrées

Contrôler format, type et longueur des données reçues, sans s'y fier comme unique protection.

3

Appliquer le moindre privilège

Limiter les droits du compte utilisé par l'application pour réduire l'impact d'une injection réussie.

4

Maîtriser les messages d'erreur

Ne pas exposer les erreurs SQL détaillées, qui guident l'attaquant dans la construction de son injection.

5

Ajouter une défense en profondeur

Un pare-feu applicatif web (WAF) filtre une partie des tentatives, en complément du code sécurisé, jamais à sa place.

6

Tester régulièrement

Un pentest et des audits périodiques détectent les champs vulnérables avant les attaquants.

Pourquoi se faire accompagner par BCIT ?

Des tests concrets

Nous recherchons activement les points d'injection sur vos applications, sur tous les vecteurs (formulaires, URL, en-têtes).

Des correctifs clairs

Des recommandations directement applicables par vos développeurs, hiérarchisées par impact.

Une couverture complète

De la sécurité du site aux audits de sécurité, nous suivons toute la chaîne.

Pas encore prêt à échanger ? Découvrez notre diagnostic cybersécurité →

Vos bases de données sont-elles à l'abri ?

Prenons 15 minutes pour évaluer l'exposition de vos applications à l'injection SQL et définir les correctifs prioritaires.