Skip to main content

Injection de code SQL

Injection de langage de requête structuré

Erreur connexe

« Ce serveur est vulnérable à une attaque par injection de code SQL. Assurez-vous que la requête SQL d'entrée est validée. »

Problème

Une attaque par injection de code SQL correspond à un type de vulnérabilité dans le code des sites web et des applications web. Cette vulnérabilité permet à un attaquant de détourner les processus back-end et d'interférer avec les requêtes qu'une application adresse à sa base de données.

Les attaques par injection de code SQL se produisent lorsque des données entrent dans un programme à partir d'une source non fiable. Ces données sont ensuite utilisées pour créer dynamiquement une requête SQL.

Lorsque les attaques par injection de code SQL sont réussies, les attaquants peuvent :

  • Se connecter à une application ou au front-end d'un site web sans mot de passe.

  • Accéder, modifier et supprimer des données stockées dans des bases de données sécurisées.

  • Créer leurs propres enregistrements de base de données ou modifier les enregistrements existants, ouvrant ainsi la voie à d'autres attaques.

Solution

Pour éviter les attaques par injection de code SQL :

  1. Configurez des instructions préparées (avec des requêtes paramétrées) pour vous assurer que les paramètres (entrées) passés dans les instructions SQL sont traités de manière sûre.

  2. Autorisez la validation des données d'entrée (ne pas bloquer la liste). Ne filtrez pas l'entrée de l'utilisateur en fonction des listes noires. Les attaquants trouvent presque toujours un moyen de contourner votre liste. Si possible, vérifiez et filtrez les entrées utilisateur en utilisant uniquement des listes blanches strictes.

  3. Échappez les caractères spéciaux des paramètres d'entrée lorsque les requêtes paramétrées et la validation des données d'entrée ne sont pas possibles.

  4. Appliquez le principe du moindre privilège, en renforçant les contrôles d'accès à votre site web pour réduire les menaces de sécurité.

    • Utilisez l'ensemble minimal de privilèges sur vos systèmes pour effectuer une action.

    • N'accordez des privilèges que pour la durée nécessaire à l'action.

    • Ne donnez pas de droits d'accès administrateur aux comptes d'application.

    • Réduisez au minimum les privilèges de chaque compte de base de données dans votre environnement.