ToutSurTout.biz
Faille include


Sécuriser les failles de type d'inclusion de fichier.

C'est une vulnérabilité très vieille, mais ça n'empêche pas de la trouver encore aujourd'hui.

Voici un exemple de code vulnérable :

<?php
   
        if (isset($_GET['p']) && !empty($_GET['p']))
            include ($_GET['p'].'.php');
           
        else
            include('home.php');
           
?>

Donc là c'est simple, la variable $_GET['p'] n'est pas vérifiée ni même traitée avant inclusion.
A partir de là, il est donc possible d'exécuter, de lire & d'écrire du code sur la machine vulnérable.

Pour remédier à ce problème il existe pas mal de méthode, certaines mieux que d'autre.
La meilleurs d'après moi reste la white liste.
Ça consiste à déclarer un array, et l'on y ajoute toutes les pages qu'on accepte de passer en paramètre à l'include.

Par exemple :

<?php
   
        $page_allowed = array('home','membre','faq','contact');
       
        if (isset($_GET['p']) && !empty($_GET['p']))
        {
            if (in_array($_GET['p'], $page_allowed))
            {
                include($_GET['p'].'.php');
            }
            else
            {
                include('404.php');
            }
        }
        else
        {
            include('home.php');
        }
       
?>

Donc là il n'y a plus aucun problème. C'est une méthode simpliste, mais ça a le mérite de marcher.
La fonction in_array se charge de confirmer que le fichier que l'on souhaite d'include à été décider part l'administrateur.