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.