我发现通过传递一个查询字符串参数来访问网站目录之外的文件,然后黑客攻击网站目录,就可以通过传递查询字符串参数来破解我的网站。
有没有办法,也许通过php.ini,不允许文件包含在某个根目录之外?
更糟糕的是,服务器上运行的大部分内容都不是我的代码。该网站在CMS Joomla上运行!并且漏洞利用是通过购买的插件完成的。
我无法更改脚本,如果必须这样做,我只需卸载受影响的插件。
答案 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;
}