Les injections SQL (SQL Injection) sont une technique d'attaque dans laquelle un attaquant injecte du code SQL malveillant dans une requête SQL légitime. L'objectif est de manipuler la base de données pour obtenir des informations sensibles, modifier ou supprimer des données, voire prendre le contrôle du serveur de la base de données.

Voici un aperçu de ce qu'est une injection SQL et des exemples d'injections courantes.

Comment fonctionne une injection SQL ?

Une injection SQL exploite les failles dans les formulaires de saisie ou les URL qui sont mal protégés. Par exemple, lorsqu'un site web permet à un utilisateur d'entrer des informations (comme un identifiant ou un mot de passe), et que ces informations sont intégrées directement dans une requête SQL sans validation, un attaquant peut entrer du code SQL à la place de données classiques.

Exemple de base d'une requête SQL vulnérable

Imaginons un site web qui demande un identifiant utilisateur pour afficher les informations de profil. La requête SQL pourrait ressembler à ceci :

SELECT * FROM utilisateurs WHERE id = '1';

Dans cet exemple, la requête SQL récupère les informations de l'utilisateur dont l'ID est égal à 1.

Si l'application n'échappe pas correctement les entrées, un attaquant peut entrer une valeur malveillante pour manipuler cette requête.


Exemple d'injection SQL basique

Supposons que l'application ne vérifie pas correctement la saisie de l'utilisateur. Un attaquant pourrait entrer ceci à la place de l'ID de l'utilisateur :

1 OR '1'='1'

La requête SQL devient alors :

SELECT * FROM utilisateurs WHERE id = '**1' OR '1'='1**';

Résultat : Comme '1'='1' est toujours vrai, la requête retourne tous les enregistrements de la table utilisateurs au lieu de l'utilisateur avec l'ID spécifique. Cela permet à l'attaquant de voir toutes les informations des utilisateurs dans la base de données.


Exemple d'injection pour contourner une connexion (bypass login)

Dans les formulaires de connexion, une requête SQL classique pourrait être :

SELECT * FROM utilisateurs WHERE username = 'utilisateur' AND password = 'motdepasse';