禁止访问PHP中某个目录之外的文件

时间:2010-05-22 02:31:22

标签: php security

我发现通过传递一个查询字符串参数来访问网站目录之外的文件,然后黑客攻击网站目录,就可以通过传递查询字符串参数来破解我的网站。

有没有办法,也许通过php.ini,不允许文件包含在某个根目录之外?

更糟糕的是,服务器上运行的大部分内容都不是我的代码。该网站在CMS Joomla上运行!并且漏洞利用是通过购买的插件完成的。

我无法更改脚本,如果必须这样做,我只需卸载受影响的插件。

1 个答案:

答案 0 :(得分:2)

是的,PHP有一个名为open_basedir的配置参数,完全是为了这个目的 (别忘了至少添加session_save_path目录)

但是!你必须检查每个传递的参数!

如果它应该只是一个文件名,请使用basename()函数截断它。 如果它应该是一个目录,你可以用这样的代码检查它

$basedir = "/your/app/path/";
$realdir = realpath($basedir.$filename); //$filename is the parameter we checking

if (substr($realdir,0,strlen($basedir)) !== $basedir) {
  header ("HTTP/1.0 403 Forbidden"); 
  exit; 
}