Injection de code
Définition
L'injection de code est une attaque par injection (appelée aussi injection de code arbitraire). Elle survient quand le site présente la vulnérabilité de ne pas vérifier les entrées et exécute directement ce qu'il reçoit.
Les pirates exploitent cette vulnérabilité et passent des fonctions PHP ou des bouts de code soigneusement forgés (parfois même des commandes systèmes). Quand ces codes sont exécutés ils peuvent présenter un danger éminent sur la confidentialité et l'intégrité (voir la disponibilité) du site Web. En effet, une telle pratique peut par exemple:
- Lister des informations confidentielles comme le codes sources coté serveur
- Supprimer et modifier des données présentes sur le site
- Détruire ou compromettre la base de données
Exploitation
Un exemple classique de cette attaque consiste à faire exécuter par le serveur un script PHP passé à travers l'URL. C'est une utilisation non prudente mais que certains développeurs ont l'habitude de faire.
Imaginons que le code source est le suivant:
<?php
$code=$_GET["code"];
eval($code.";");
?>
Si le développeur n'a pas filtré ses entrées alors il se peut qu'un pirate forge la requête suivante dans la barre d'URL:
http://www.site-victime.com/pageVulnérable.php?code=phpinfo()
On se retrouve donc avec la fonction
phpinfo() qui sera exécutée via la fonction
eval() et qui affichera toutes les informations clé de la configuration du moteur PHP. Ce qui constitue une atteinte flagrante à la confidentialité.
Comment s'en protéger?
Au niveau du code PHP
Bien entendu, la meilleure façon pour se protéger de cette attaque est d'éviter carrément cette pratique. C'est à dire, il ne faut en aucun cas passer des informations tellement critiques à travers l"URL ce qui donnera l'opportunité aux personnes malveillantes d'en abuser.
Si toutefois (et pour une raison quelconque) votre site est fait ainsi, alors il faut bien filtrer les entrées des utilisateurs en commençant par fixer une longueur maximale à ne pas dépasser, puis en dressant une liste de fonctions PHP autorisées (dans un fichier texte ou dans la base de données) de telle sorte à vérifier si la fonction passée figure dans la liste avant d'ordonner son exécution (par la fonction
eval() ou autrement).