Table des matières
Qu'est-ce qu'une injection SQL ?
En quoi les injections SQL importent-t-elles ?
Les injections SQL arrivent en tête de toutes les listes OWASP Top 10 depuis plus de 10 ans. De nombreuses applications web utilisent des bases de données pour stocker et récupérer efficacement les données. Par conséquent, les bases de données contiennent des quantités colossales de données importantes et sensibles, telles que les noms d'utilisateur, mots de passe, dates de naissance, numéros de sécurité sociale, etc.
Les applications Web interagissent avec les bases de données à l'aide de requêtes SQL. En règle général, ces requêtes sont effectuées à l'aide d'entrées sur les pages Web – comme pour les recherches. Cependant, les applications Web mal conçues sont susceptibles d'accepter tout type de requête SQL dans une zone de saisie prévue à la base pour n'accepter qu'un seul type de données, par exemple, le prénom d'un utilisateur. Les malfaiteurs exploitent donc cette faille en saisissant des requêtes SQL dans ces champs afin de récupérer ou de corrompre les données stockées au sein de la base de données.
Ce que vous pouvez faire
Il existe toute une série de techniques pour empêcher les pirates de voler ou de corrompre directement vos données. La plupart d'entre elles consistent à limiter autant que possible la capacité des utilisateurs finaux à saisir des informations ou des commandes pouvant être interprétées par votre serveur Web ou votre base de données. Il est important de noter que ces entrées peuvent provenir de diverses sources, notamment des formulaires d'envoi, des arguments d'URL ou encore des cookies de navigateur.
Vous trouverez ci-dessous quelques-unes des techniques les plus courantes pour lutter contre les injections SQL.
- Nettoyage.La méthode de protection la plus courante consiste à nettoyer toutes les données fournies par les utilisateurs afin de supprimer les chaînes de caractères qui sont susceptibles d'être exécutées sous forme de commandes SQL par le système ou d'être transmises directement à une base de données SQL. Le nettoyage consiste généralement à remplacer les commandes exécutables trouvées dans ces données par d'autres caractères non exécutables.
- Filtrage et validation.Toutes les données fournies par les utilisateurs doivent répondre à des exigences strictes en matière de format, de longueur et d'attributs avant d'être validées. Toute présence de commandes SQL ou de code malicieux doit être filtrée.
- Exclusion des paramètres d'URL non sécurisés.Évitez d'utiliser des arguments d'URL, comme dans les modèles objet-relationnel (ORM), pour déclencher des actions au sein des bases de données. Utilisez plutôt une API sécurisée.
- Limitation de la portée des commandes SQL.Utilisez les commandes LIMIT dans les opérations SQL afin de minimiser la divulgation des données au cas où votre base de données serait touchée par une injection SQL.
Bien que les techniques de codage comme celles énumérées ci-dessus soient importantes, un codage soigneux ne peut à lui seul garantir votre sécurité. Les bibliothèques logicielles tierces, les modifications de code ultérieures par d'autres développeurs ainsi que les techniques d'offuscation récemment découvertes peuvent exposer votre site Web aux attaques par injection SQL. Ajoutez une couche de sécurité automatique grâce au pare-feu Web Application Firewall et vos sites et applications Web seront toujours parfaitement protégés.