"backdoor.php.jpg" ou "backdoor.php\0.jpg". Le "\0" indique au serveur qu'il arrive en bout de chaine. Tout ce qui suit ne sera donc pas interprété.
et utilise path_info() avec l'option PATH_EXTENSION pour récupérer l'extension
<?php
$file = $_FILES["MY_FILE"];
$actualName = $file['tmp_name'];
$newName = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
$path = "/upload"
// On crée un tableau avec les extensions autorisées
$legalExtensions = array("JPG", "PNG", "GIF", "TXT");
// On récupère l'extension du fichier soumis et on vérifie qu'elle soit dans notre tableau
$extension = pathinfo($file['MY_FILE'], PATHINFO_EXTENSION);
if (in_array($extension, $legalExtensions)) {
move_uploaded_file($actualName, $path.'/'.$newName.'.'.$extension);
}
?>
mais selon php.net l'option PATH_EXTENSION récupère la dernière extension
"Si path contient plus d'une extension, PATHINFO_EXTENSION retourne uniquement le dernier"
En l’occurrence dans le cas d'une double extension nous ne sommes pas protégé non plus avec cette méthode ?
il vaut mieux récupérer la première occurence après le premier point avec strstr?
foo.min.js est un nom de fichier valide, si tu protège le premier point donc tu supposes que .js n'est pas une extension valide ? pathinfo ne sait rien du contenu, la preuve tu peux donner en argument le nom d'un fichier inexistant , elle retournera les infos sous forme de tableau ou chaîne suivant comment tu l'utilises. Pour le\0 les nouvelles versions de PHP savent gérer ce cas, mais bon tu peux toujours faire un remplacement (il correspond à chr(0) )
Sinon tu as la possibilité de vérifier le type MIME avec l'extension https://www.php.net/manual/fr/book.fileinfo.php entre autres.. Tu as pléthore de liens ici et là pour faire un upload sécurisé ou utiliser des solutions existantes
MY_FILE est un index de la variable $_FILES et non de $file.
- Edité par Lartak 9 mai 2019 à 3:41:32
Oui oui c'est vrai!
WillyKouassi a écrit:
Salut,
foo.min.js est un nom de fichier valide, si tu protège le premier point donc tu supposes que .js n'est pas une extension valide ? pathinfo ne sait rien du contenu, la preuve tu peux donner en argument le nom d'un fichier inexistant , elle retournera les infos sous forme de tableau ou chaîne suivant comment tu l'utilises. Pour le\0 les nouvelles versions de PHP savent gérer ce cas, mais bon tu peux toujours faire un remplacement (il correspond à chr(0) )
Sinon tu as la possibilité de vérifier le type MIME avec l'extension https://www.php.net/manual/fr/book.fileinfo.php entre autres.. Tu as pléthore de liens ici et là pour faire un upload sécurisé ou utiliser des solutions existantes
- Edité par WillyKouassi 7 mai 2019 à 18:14:50
Ok ok, je vois ...
Après j'attends des fichiers image ou texte, le format monfichier.quelquechose.extension comme foo.min.js est impossible? du coup, je peux rester avec strstr?
C'était plus simple de tester non ? De ce que je sais, un fichier a une extension donc tes histoires de double extension et (foo.t.n.txt) triple extension , je ne vois pas trop.
Edit: Pour les images on a par exemple getimagesize, sinon comme je l'ai dit tu as plein d'exemples ici et là pour faire un upload sécurisé quitte à utiliser des lib existantes
Déjà, lorsque tu crées un input de type file, tu peux indiquer quel type de fichier tu acceptes, ce qui fera que lorsque l'utilisateur cliquera sur l'input et que la fenêtre d'exploration s'ouvrira pour qu'il sélectionne le fichier qu'il veut uploader, seul les fichiers de type acceptés seront affichés, il ne pourra donc pas sélectionner un de ses fichiers qui ne respectent pas le(s) types autorisés.
Cela ne remplace pas la validation côté serveur, mais tu auras au moins déjà un filtrage de ce que tu pourrais recevoir.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
[PHP] Sécurité upload => path_info()
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.