Issue lors de l'utilisation des octets nuls

Comme PHP utilise des fonctions C pour les op�rations sous-jacentes, notamment au niveau du syst�me de fichier, il peut g�rer les octets nuls d'une fa�on inattendue. Sachant que les octets nuls d�notent la fin d'une cha�ne de caract�res en C, certaines fonctions vont donc consid�rer ces cha�nes jusqu'� la premi�re occurrence d'un octet nul. L'exemple suivant pr�sente un code vuln�rable qui montre ce probl�me :

Exemple #1 Script vuln�rable aux octets nuls

<?php
$file 
$_GET['file']; // "../../etc/passwd\0"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
   
// file_exists retournera true sachant que le fichier /home/wwwrun/../../etc/passwd existe
   
include '/home/wwwrun/'.$file.'.php';
   
// le fichier /etc/passwd sera inclu
}
?>

Ainsi, toute cha�ne utilis�e dans des op�rations sur le syst�me de fichiers doit toujours �tre valid�e proprement. Voici une meilleure solution de l'exemple pr�c�dent :

Exemple #2 Validation correcte de l'entr�e

<?php
$file 
$_GET['file'];

// Whitelisting possible values
switch ($file) {
   case 
'main':
   case 
'foo':
   case 
'bar':
   include 
'/home/wwwrun/include/'.$file.'.php';
   break;
   default:
   include 
'/home/wwwrun/include/main.php';
}
?>