我正在编写一个脚本,允许用户浏览给定目录,该目录不是此文件所在的目录,而是设置在变量中。
define('FOLDER', '../_files/');
现在,rendred html允许导航该文件夹中的子文件夹。我使用“dir”GET变量告诉我的脚本要显示哪个子文件夹的内容,并使用相同的dir变量允许向上移动的“..”链接。
我已经设置了一个检查,如果$ _GET ['dir']等于FOLDER,它不应该显示“..”链接。但是它很容易混淆坐在网址中的变量,无论我在哪里,我的脚本允许浏览授权文件夹上方。不是一个安全的情况...
所以我想我应该根据请求的目录检查授权目录的完整本地路径,如果后者不在授权目录中,则不显示“..”。
但我不知道该怎么做。任何提示或指针将不胜感激。感谢
答案 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;
}