J'ai récemment joué avec PHP pour réaliser un petit script d'upload et de partage de fichiers pour ma copine.
À un moment donné, j'ai dû fournir la possibilité de supprimer des fichiers, et c'est alors que j'ai touché plus en profondeur à la fonction unlink() de PHP.
L'un des problèmes, avec cette fonction, c'est qu'on lui passe un nom de fichier à supprimer, et ça pose de gros problèmes de sécurité. Si jamais quelqu'un a connaissance du fichier PHP qui permet de supprimer quelque chose, il peut envoyer n'importe quel nom à supprimer et vider mon/votre site très facilement (imaginez un unlink("../index.html") dans un répertoire quelconque et il vous supprime votre page d'accueil).
Bref, l'astuce que j'ai utilisée: prendre le basename du fichier passé en paramètre pour être sûr que la suppression se réalise dans le dossier voulu.
Au final, ça ressemble à ça:
if (isset($_GET['unlink'])) {
$fullPath = basename($_GET['unlink']);
if (is_file($fullPath))
{
$success = unlink($fullPath);
}
// refresh page
header( 'Location: .' ) ;
exit(0);
break;
}
Bon après, il faut s'assurer que tous les fichiers que vous avez dans ce répertoire sont "supprimable"; si vous laissez traîner un fichier que vous souhaitez garder, faites un filtre avant d'executer unlink().
There are comments.