您的位置 首页 php

nginx限制php程序“跨站”访问

我秀站外合作有一个需求:需在一台web服务器上增加一个虚拟主机用来做图片资源站,所用程序为第三方,担心有后门程序,因此希望最好隔断与原机器其他服务的关系。

思考了一下,确实有一些风险存在。目前我们服务器上都统一使用nobody用户启动nginx和php,包括web目录,这些机器上部分有多个域名在一起运行。这样至少存在一个问题:如果某一个虚拟主机站点有问题,其web目录如/diska/htdocs_1被注入恶意程序,那么其他的站点目录如/diska/htdocs_2域名也很可能难以幸免地通过这个恶意程序被访问到。分开不同用户权限,固然可以解决这个问题。但同时也意味需要徒增一个特定用户,想找一个类似chroot功能。经过搜索查找,nginx中可以增加一个配置项“fastcgi_param PHP_VALUE xxxx”达成这功能:

server {

listen 80 ;

……

location ~ \.(php|phtml) {

……

fastcgi_param PHP_VALUE “open_basedir=$document_root:/tmp/”;

……

}

}

配置项加入在需要设置vhost中,冒号”:”为分隔多个路径。当然也可以加入到 fastcgi_params中让nginx全局调用。

这样实现了虚拟主机限制在各自的web目录中,当某一个域名下出现漏洞或被攻击时,同一服务器下的其他应用域名不会因此而导致程序文件被查看或修改,避免“跨站”影响。

在查找过程中,同时发现如被入侵,虽然禁锢了对其他web目录的操作,但php程序还可以调用系统的命令进行一些操作。进一步加强安全,降低webshell调用的系统命令,可在php.ini下加入以下选项:

disable_functions = rmdir,exec,system,passthru,shell_exec

以上,我和松哥通过一些探针脚本进行测试验证,成功通过检测。

如果没上述的设置,那么恶意的脚本能直接通过浏览器访问到其他站点目录的内容,甚至可以本地调用系统命令启动一些基于php启动权限拥有者可以启动的端口。

供参考。

**注** 网上一些资料说在php5.2版本下,这些设置是不生效的。特意试了一下,真的如此。幸好我们的普遍在5.3以上。

文章来源:智云一二三科技

文章标题:nginx限制php程序“跨站”访问

文章地址:https://www.zhihuclub.com/152269.shtml

关于作者: 智云科技

热门文章

网站地图