我想检查文件路径是否在当前目录树中。
假设参数为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权限运行。
答案 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
}