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';
}
?>