列出文件夹内容:如何防止用户超出授权目录?

时间:2009-08-26 08:37:32

标签: php tree directory-listing

我正在编写一个脚本,允许用户浏览给定目录,该目录不是此文件所在的目录,而是设置在变量中。

 define('FOLDER', '../_files/');

现在,rendred html允许导航该文件夹中的子文件夹。我使用“dir”GET变量告诉我的脚本要显示哪个子文件夹的内容,并使用相同的dir变量允许向上移动的“..”链接。

我已经设置了一个检查,如果$ _GET ['dir']等于FOLDER,它不应该显示“..”链接。但是它很容易混淆坐在网址中的变量,无论我在哪里,我的脚本允许浏览授权文件夹上方。不是一个安全的情况...

所以我想我应该根据请求的目录检查授权目录的完整本地路径,如果后者不在授权目录中,则不显示“..”。

但我不知道该怎么做。任何提示或指针将不胜感激。感谢

2 个答案:

答案 0 :(得分:1)

您可能需要查看realpath()

$foo = realpath($foo);
if (substr($foo, 0, 8) != '/my/path') {
    return false;
}

......或类似的东西。

this answer复制,因为我认为这个问题更好。

答案 1 :(得分:0)

或者您可以使用正则表达式

$requested = realpath($foo);
$allowedpath = '/path/to/allowed';

$regex = '/^'.addslashes($allowedpath).'\/?.*$/';

if (!preg_match($regex, $requested)) {
    return false;
}