Le tuto précédent est une faille
Négligence caractérisée: Arrrg!!!!!!, mais j'y pense... Je viens d'ajouter une faille sur mon serveur avec le billet précédent!!!!!!
je viens de tester l'url suivante:
http://blog-du-grouik.tinad.fr/fichiers.php?filename=../robots.txt
Grâce aux ".." je peux remonter de dossier, et du coup partout où www-data peut lire, j'ai accès en remontant simplement les répertoires. (Et trouver des scripts contenant des mots de passe par exemple)
Bon... il va falloir contrôler ce que l'utilisateur met dans l'URL. chrooter www-data dans son Vhost? nana je ne sais pas comment on fait.
Le plus simple sera de détecter les "..". J'ajoute donc une condition à laquelle on retourne la page 404.
et mon fichier php devient
<?php //tester si le fichier existe, et la présence de ".." indiquant que l'utilisateur tente de remonter les répertoires. if((!file_exists("fichiers/".$_GET['filename'])) OR (strpos($_GET['filename'],'..')!==false)) { //ce n'est pas le cas, on envoit l'header 404 header("HTTP/1.0 404 Not Found"); echo file_get_contents("404/404.htm"); //puis on quitte le script die; } //on indique le mime (type) du fichier header('Content-type: '.mime_content_type('fichiers/'.$_GET['filename'])); //on indique le nom du fichier: header('Content-Disposition: attachment; filename="'.$_GET['filename']); //on envoie le fichier source readfile("fichiers/".$_GET['filename']); ?>
Si vous voyez une autre façon d'utiliser ce script à mauvais escient, merci de me prévenir.