如果用户在服务上请求文件,我通常可以通过使用PHP realpath()来保护他们不要访问我想要的范围之外的文档,并确保它位于根目录下。比如这样:
$path = realpath($_GET['path']);
// Protect against LFI vulnerabilities
if (substr($path, 0, strlen($root)) == $root)
{
// safe
}
但是,realpath()仅适用于已存在的文件 。 如果我想确保用户将要写入脚本的位置在根目录下,该怎么办?
我不能使用realpath(),我应该检查并删除'..'引用吗? 或者有更好的方法吗?
答案 0 :(得分:0)
如何检查realpath(dirname($ file))是否在根目录下?
$dir = $path;
$found = false;
while ($dir) {
$dir = dirname($dir);
if (!is_dir($dir)) {
continue;
}
if (strpos(realpath($dir), $root) === 0) {
$found = true;
}
break;
}
var_dump($found);