L’injection SQL est une vulnérabilité de sécurité Web qui permet à un attaquant d’interférer avec les requêtes qu’une application adresse à sa base de données. Cela permet généralement à un attaquant d’afficher des données qu’il n’est normalement pas en mesure de récupérer. Cela peut inclure des données appartenant à d’autres utilisateurs ou toute autre donnée à laquelle l’application elle-même peut accéder. Dans de nombreux cas, un attaquant peut modifier ou supprimer ces données, provoquant des modifications persistantes du contenu ou du comportement de l’application.
Dans certaines situations, un attaquant peut intensifier une attaque par injection SQL pour compromettre le serveur sous-jacent ou d’autres -end l’infrastructure ou effectuer une attaque par déni de service.
Une attaque par injection SQL réussie peut entraîner un accès non autorisé à des données sensibles, telles que des mots de passe, des détails de carte de crédit ou des informations personnelles sur l’utilisateur. De nombreuses violations de données très médiatisées ces dernières années ont été le résultat d’attaques par injection SQL, entraînant des atteintes à la réputation et des amendes réglementaires. Dans certains cas, un attaquant peut obtenir une porte dérobée persistante dans les systèmes d’une organisation, entraînant un compromis à long terme qui peut passer inaperçu pendant une période prolongée.
Il sont une grande variété de vulnérabilités, d’attaques et de techniques d’injection SQL, qui surviennent dans différentes situations. Voici quelques exemples d’injection SQL courants :
- Récupération de données masquées, où vous pouvez modifier une requête SQL pour renvoyer des résultats supplémentaires.
- Subversion de la logique de l’application, où vous pouvez modifier une requête pour interférer avec la logique de l’application.
- Attaques UNION, où vous pouvez récupérer des données à partir de différentes tables de base de données.
- Examiner la base de données, où vous pouvez extraire des informations sur la version et la structure de la base de données.
- Injection SQL aveugle, où les résultats d’une requête que vous contrôlez ne sont pas renvoyés dans les réponses de l’application.
La plupart des instances d’injection SQL peut être évité en utilisant des requêtes paramétrées (également appelées instructions préparées) au lieu de la concaténation de chaînes dans la requête.