当文件尚不存在时,防止类似LFI的漏洞

时间:2012-07-25 17:32:57

标签: php security web realpath

如果用户在服务上请求文件,我通常可以通过使用PHP realpath()来保护他们不要访问我想要的范围之外的文档,并确保它位于根目录下。比如这样:

$path = realpath($_GET['path']);
// Protect against LFI vulnerabilities
if (substr($path, 0, strlen($root)) == $root)
{
    // safe
}

但是,realpath()仅适用于已存在的文件 。 如果我想确保用户将要写入脚本的位置在根目录下,该怎么办?

我不能使用realpath(),我应该检查并删除'..'引用吗? 或者有更好的方法吗?

1 个答案:

答案 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);