0

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

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

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

我设置了一个检查,如果 $_GET['dir'] 等于 FOLDER,它不应该显示那个“..”链接。但是很容易弄乱 url 中的那个变量,无论我做什么,我的脚本都允许在授权文件夹上方浏览。不完全是一个安全的情况...

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

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

4

2 回答 2

1

您可能想查看realpath()

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

...或类似的东西。

从这个答案复制,因为我认为这个问题更好。

于 2009-08-26T08:45:52.493 回答
0

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

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

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

if (!preg_match($regex, $requested)) {
    return false;
}
于 2009-08-26T08:58:27.383 回答