L'une des plus grandes classes de vulnérabilités Web est connue sous le nom d'« injection SQL » ou SQLi. Le langage de requête structuré, alias SQL, est le langage utilisé pour interagir avec la majorité des bases de données, bien qu'un certain nombre de variantes du langage soient utilisées en fonction de la plate-forme de base de données. Tout site Web qui stocke des données utilisateur, telles que des informations de compte, ou fournit une fonctionnalité de téléchargement d'utilisateur, comme un site Web d'hébergement d'images, utilisera une base de données pour stocker ces données.
Astuce : SQL se prononce généralement « ess cue ell » ou « sequel », la première option étant plus courante en anglais britannique et la seconde plus répandue en anglais américain. Les deux prononciations sont généralement comprises dans le contexte des bases de données.
Qu'est-ce que SQLi ?
SQLi est une vulnérabilité dans laquelle les développeurs Web qui conçoivent le code qui communique entre le serveur Web et la base de données n'implémentent pas de protections contre les commandes SQL soumises par un utilisateur. Le problème est qu'il est possible de sortir des instructions de la base de données et d'ajouter de nouveaux arguments ou une instruction entièrement nouvelle. L'instruction de base de données modifiée ou seconde peut effectuer une série d'actions, notamment des suppressions ou des fuites de données potentiellement à grande échelle.
Les exploits consistent généralement à faire en sorte que les déclarations existantes soient vraies en toutes circonstances ou à fournir une deuxième commande par lots qui exécute une action spécifique telle que la suppression ou l'affichage de toutes les données. Par exemple, une instruction SQL pour se connecter à un site Web peut vérifier si le nom d'utilisateur et le mot de passe soumis correspondent à une entrée dans la base de données. Pour tenter d'accéder à un exploit d'injection SQL, vous pouvez essayer d'ajouter une clause « ou vrai » telle que « ou 1=1 ». Cela rendrait la commande du type "connexion avec [ce] nom d'utilisateur, si le mot de passe est [ce], ou cette déclaration est vraie".
Comment empêcher SQLi
SQLi était un moyen très courant pour les sites Web de voir leur base de données violée, puis divulguée en ligne. Grâce à un effort concerté pour s'assurer que la sensibilisation à la sécurité fait partie de la formation des développeurs, cette classe de vulnérabilité a été largement résolue et n'est plus que rarement vue.
La bonne méthode pour empêcher SQLi consiste à utiliser des instructions préparées, également appelées requêtes paramétrées. Traditionnellement, les instructions SQL sont déclarées et l'entrée utilisateur est concaténée lors de cette déclaration. Avec les instructions préparées, la commande de base de données est écrite, puis une fonction séparée exécute la commande et insère les données utilisateur. Bien que cela puisse sembler une différence mineure, cela change complètement la façon dont la commande est gérée. La différence empêche l'exécution de commandes SQL significatives et traite toutes les entrées utilisateur comme une chaîne, empêchant l'injection SQL de se produire.