Injection SQL
💡
L’injection SQL (ou SQL Injection) est une faille de sécurité critique qui affecte les applications web interagissant avec une base de données SQL. Elle se produit lorsqu’un utilisateur malveillant insère du code SQL non prévu dans un formulaire ou une entrée utilisateur, dans le but de modifier, consulter, voire détruire les données stockées.
Comment fonctionne l’injection SQL
Lorsqu’une application utilise des requêtes SQL mal sécurisées, l’attaquant peut injecter des commandes SQL dans un champ de formulaire, comme un nom d’utilisateur ou un mot de passe. Si le système ne filtre pas correctement ces données, la requête devient vulnérable :
Exemple basique :
sqlSELECT * FROM utilisateurs WHERE nom = 'admin' AND mot_de_passe = '1234';
Si un utilisateur entre ceci comme mot de passe : ‘ OR ‘1’=’1′ –, la requête devient :
sql
SELECT * FROM utilisateurs WHERE nom = ‘admin’ AND mot_de_passe = » OR ‘1’=’1′ –‘;
Résultat : l’accès est accordé sans mot de passe valide.
Types d’injections SQL
Il existe plusieurs types d’attaques par injection SQL :
– Injection SQL classique : l’attaquant manipule directement la requête.- – Injection SQL inférentielle (blind) : l’attaquant déduit les réponses via des changements de comportement du serveur.
- – Injection SQL basée sur le temps : le serveur prend du temps à répondre selon les requêtes.
- – Injection SQL avec UNION : utilise l’opérateur SQL UNION pour récupérer des données d’autres tables.
Risques liés à l’injection SQL
Une injection SQL réussie peut permettre à l’attaquant de :
– Accéder à des données confidentielles (ex. : mots de passe, emails, cartes bancaires).
– Modifier ou supprimer des enregistrements dans la base de données SQL.
– Exécuter des commandes sur le serveur SQL.
– Contourner l’authentification de l’application.
– Espionner ou injecter du contenu malveillant.
Exemples concrets
– Une page de connexion vulnérable permet à n’importe quel utilisateur d’accéder à un compte administrateur.- – Un champ de recherche produit une erreur SQL qui révèle la structure de la base.
- – Une attaque avec UNION SELECT permet de voler les données d’une table comme utilisateurs.
Comment se protéger
Voici les bonnes pratiques pour empêcher l’injection SQL :
1) Utiliser des requêtes préparées (PDO, mysqli avec bind_param…)- 2) Ne jamais concaténer les entrées utilisateur dans une requête SQL
- 3) Filtrer et valider toutes les entrées
- 4) Limiter les privilèges des utilisateurs de la base
- 5) Configurer les messages d’erreur pour ne pas exposer d’infos sensibles
- 6) Analyser les logs pour détecter les tentatives d’injection
Technologies concernées
L’injection SQL peut toucher de nombreuses bases de données, telles que :
– MySQL- – SQL Server (MSSQL)
- – PostgreSQL
- – Oracle
- – Microsoft SQL
Et les langages côté serveur comme :
– PHP- – Python
- – Node.js
- – Java
Outils pour détecter les injections SQL
– Messages d’erreur SQL- – OWASP ZAP (audit de sécurité)
– SQLMap (test automatisé)
– WAF (Web Application Firewall)