2010-05-22 55 views
0

我发现了一个难题,我的网站可以通过传递一个查询字符串参数,该参数有很多../s来访问网站目录之外的文件,并且然后破解网站。防止访问PHP中某个目录以外的文件

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

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

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

回答

1

是的,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; 
} 
相关问题