Articles récents
PHP : Protection contre l'injection de code
L'OWASP (Open Web Application Security Project) est une communauté travaillant sur la sécurité des applications Web. Elle publie régulièrement le top dix des risques de sécurité applicatifs web les plus critiques. Ce classement fait référence aujourd'hui dans le domaine de la sécurité et est cité par divers organismes (DoD, PCI Security Standard).
Le risque le plus critique, et le plus souvent utilisé sur des sites vulnérables, est l'injection de code qui existe sous de multiples formes (SQL, XSS, ...).
Voici un article pour vous aider à protéger vos pages PHP contre ce fléau.
1) Qu'est ce que l'injection de code?
L'injection de code est une technique qui consiste à injecter des données dans une application pour en modifier le comportement ou se donner des droits sur l'applicatif.Comment réaliser une injection?
Souvent, les pages vulnérables sont celles qui affichent le retour d'un formulaire.
Un exemple simple consiste à injecter du code javascript :
Un autre exemple très connu est l'injection SQL. Nous allons prendre l'exemple d'un formulaire de connexion à un site web. L'usager doit en théorie taper son login et son password. Une implémentation basique de ce mécanisme consiste à tester la base de données des abonnés en utilisant une requête SQL de la forme :
L'attaquant connait ce mécanisme de connexion est présuppose que la requête SQL est de cette forme. Il tape le login Dupont et tape pour mot passe le code : ' or 1=1 --. Ce qui donne:
Le -- met en commentaire tout ce qui suit et le OR 1=1 permet à requête de retourner true systématiquement. Ainsi, l'attaquant court-circuite la validation du mot de passe et force la requête à renvoyer true.
Vous pouvez tester ces deux exemples sur votre site, et si cela réagit comme ci-dessus alors je vous conseille vivement d’appliquer ce qui va suivre!
2) Comment s'en protéger?
L'attaquant doit injecter son code, il faudra donc tester les entrées renvoyées par l'usager et supprimer les éléments dangereux comme certains caractères spéciaux et interdire certains mots qui pourrait être utilisé à des fins intrusives ou destructrices.Le simple fait de retirer les caractères spéciaux et de limiter les entrées à quelques caractères bien définis va énormément compliquer la tâche de l'attaquant. Il lui sera quasi-impossible de passer au travers de cette restriction.
Pour les mots clés à supprimer, il faudra également être attentifs à ce que peut insérer l'attaquant car il y a des cas à prendre en
Imaginons que notre script de protection teste les entrées est supprime le mot SCRIPT, il y a deux attaques possibles pour bypasser cette limitation:
Donc voici un script qui réalise la protection d'une page PHP. Bien évidement, ce script prend en compte les remarques citées supra.
Conclusion
Vous pouvez vous baser sur cet exemple de script afin de sécuriser votre site. N'oubliez pas une chose importante, celle de bien identifier les vecteurs d'entrées/sorties de votre application. C'est par ces vecteurs que l'attaquant entrera, on peut lister l'url, les fichiers transmis, et les variables externes de PHP ($_GET, $_POST, $_COOKIE, ...).
© 2024 www.doritique.fr par Robert DORIGNY