3

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

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

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

我不能使用 realpath(),我应该检查并去掉“..”引用吗?或者,还有更好的方法?

4

1 回答 1

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);
于 2012-08-05T06:03:14.127 回答