Le Danger de l'Injection
L'injection se produit lorsqu'une application envoie des données non fiables à un interpréteur en tant que partie d'une commande ou d'une requête. Les données malveillantes trompent l'interpréteur pour qu'il exécute des commandes involontaires ou accède à des données sans autorisation.
Types d'Injection Courants
- SQL Injection (SQLi) : Manipuler des requêtes SQL pour extraire toute la base de données.
- Command Injection : Exécuter des commandes système (ex:
ls,rm -rf) sur le serveur. - LDAP/NoSQL Injection : Manipuler des filtres d'annuaire ou des requêtes MongoDB.
Comment l'éradiquer ?
L'unique solution fiable est de séparer les données du code.
- Requêtes paramétrées (Prepared Statements) : Utilisez toujours des interfaces qui séparent la commande des paramètres.
- Validation stricte des entrées : Utilisez une "liste blanche" (allowlist) de caractères autorisés.
- Échappement des caractères : Si les requêtes paramétrées sont impossibles, échappez les caractères spéciaux de l'interpréteur ciblé.
-- VULNÉRABLE
SELECT * FROM users WHERE username = 'admin' OR '1'='1';
-- SÉCURISÉ (via driver application)
SELECT * FROM users WHERE username = ?; -- Le '?' recevra la donnée brute sans exécution possible[!WARNING] Utiliser de simples expressions régulières pour filtrer les mots "SELECT" ou "DROP" est insuffisant. Les attaquants utilisent des encodages variés pour contourner ces filtres basiques.