2011-04-02 5 views

Répondre

2

Si vous ne travailler que dans le seul répertoire et non les sous-répertoires ci-dessous vous pouvez faire

$file = "/tmp/".basename($input); 

qui devrait vous donner le nom du fichier à la fin de tout chemin donné en entrée, et l'ajouter au répertoire que vous vouliez.

0

Je ne sais pas vraiment comment ../file.txt est censé se transformer en /tmp/file.txt dans votre exemple, mais de vérifier si un chemin est un sous-chemin d'un autre, utilisez realpath avec une simple comparaison :

$path = '../foo'; 
$allowedPath = '/tmp/'; 

$path = realpath($path); 
if (substr($path, 0, strlen($allowedPath)) !== $allowedPath) { 
    // path is not within allowed path! 
} 
2

Utilisez realpath() pour obtenir une forme canonique du chemin, et éliminer toute ../ -s. Vérifiez ensuite qu'il contient le chemin d'accès complet du répertoire dans lequel vous souhaitez le contenir.

Tels que:

$path = "/tmp/file.txt"; 
$directory = "{full path of your files directory}"; 

if (strpos(realpath($path), $directory) === 0) { 
    // path OK 
} 
else { 
    // path not ok 
} 
Questions connexes