Section courante

A propos

Section administrative du site

Injection SQL

L'injection SQL est une l'une des failles de sécurité les plus connus dans le domaine du Web, elle est particulièrement présente dans le langage de programmation PHP mais peut également être présente dans d'autres langages de programmation tel le Java, ColdFusion ou .NET. Le problème est directement relié aux faits que requête est transmis en format texte avec un encodage manuel plutôt qu'une transmission de l'information directement en binaire. Ainsi, on ne retrouve pas ce genre de faille avec des vieux langages comme Turbo Pascal par exemple, puis l'information brute est directement transmise en binaire dans un enregistrement Record. Mais les idées modernes, comme le SQL, rendre peut-être les choses plus facile pour les développeurs ou les néophytes, mais elles ont cependant leurs lots d'inconvénients.

La technique d'attaque

L'idée derrière l'injection sur qu'un attaquant exploite URL pour passer des requêtes SQL directement dans le code d'une application. Ainsi, par exemple, supposer que l'un des paramètres d'une application passer par l'URL est un texte, l'attaquant en profitera pour rajouter du code malicieux immédiatement après un texte en introduisant un simple guillemet et se rajoutera une condition vrai. De façon concrète, si par exemple, votre système utilise la requête SQL suivante pour vérifier si l'utilisateur a le droit de se connecter :

SELECT * FROM table_utilisateur WHERE nom_utilisateur = ? AND motdepasse = ?

La personne malicieuse en profitera pour rajouter dans l'URL du paramètre «?nom_utilisateur=utilisateur ' or '1'='1' or '&modepasse=mot_de_passe_invalide» et il pourra accéder aux panneau d'administration et pénétra par le fait même votre système. Pour remédier à cette situation, il ne faut pas passer directement le paramètre URL à la requête SQL et traiter les caractères «'» en les doublant tout simplement et en traitant également les caractères d'échappement. Cette amélioration à votre système permettra également des utilisateurs ayant des noms comme «O'Connor» d'être traité de manière approprié.

Les solutions

En général, au détriment des performances, on utilise des «instructions préparées» comme la classe PreparedStatement du Java par exemple, pour sécurisé les paramètres transmis. La seconde solution consiste à utiliser des STORED-PROCEDURE. Enfin, la troisième méthode consiste à utiliser des ORM pour communiquer en SQL avec la base de données.

Conclusion

Bien qu'il s'agit de négligence flagrante au niveau fonctionnelle d'une page Web, le fait d'effectuer se genre d'attaque vers un système ne vous appartenant pas est totalement illégale et est punissable par la loi dans de nombreux pays. Enfin, si vous souhaitez passer plus de l'avant les tests de sécurités, il existe de nombreux logiciels comme Checkmarx, Coverity, Fortify, Klocwork, Parasoft, Veracode, RATS, FlawFinder, FindBugs, FXCop, PREfast pour vérifier votre code.



Dernière mise à jour : Mercredi, le 27 novembre 2019