2011-12-15 55 views
0

我想检查文件路径是否在当前目录树中。如何知道当前目录树中是否存在文件

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

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

我知道它可以通过删除..字符使用一些正则表达式来抑制。这将确定地解决它。但我想知道如何创建某种chroot ed环境sot,无论路径/到/脚本通过它将在WD下搜索?

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

+1

从PHP 5.3.0,可以设置从你的PHP脚本中的open_basedir。 –

回答

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 
} 
相关问题