如何知道当前目录树中是否存在文件

时间:2011-12-15 10:11:24

标签: php security

我想检查文件路径是否在当前目录树中。

假设参数为js/script.js。我的工作目录(WD)是/home/user1/public_html/site

现在,对于有人提供js/script.js的当前WD,我可以通过附加到WD进行检查。它适用于这种正常路径。但是,如果任何人(可能是攻击者)想要通过../../../../etc/password,这将是一个问题。

我知道可以通过使用一些RegEx删除..字符来抑制它。这肯定会解决它。但我想知道如何创建某种chroot环境sot,无论路径/ /脚本被传递,它都会在WD下搜索?

编辑: 我知道http://php.net/chroot。它要求您的应用以root权限运行。

1 个答案:

答案 0 :(得分:1)

http://php.net/manual/en/function.realpath.php

$chroot = '/var/www/site/userdata/';
$basefolder = '/var/www/site/userdata/mine/';

$param = '../../../../etc/password';
$fullpath = realpath($basefolder . $param);

if (strpos($fullpath, $chroot) !== 0) {
  // GOTCHA
}