当前位置:首页 > 技术知识 > 正文内容

nginx限制php程序“跨站”访问_写好的php程序脚本怎么运行

maynowei9个月前 (09-23)技术知识124

我秀站外合作有一个需求:需在一台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以上。

相关文章

去哪儿暑期PM实习一月记:在互联网公司做产品实习是怎样一种体验

人人都是产品经理旗下【起点学院】推出产品经理“365天”成长计划,BAT大牛带你学产品! 在毕业前的最后一个暑假,缘分使然找了几个月暑期实习之后进入了去哪儿,申请提前入职工作至今正好满一个月。原先有在...

微软明年要停止SQL Server 2005的技术支持了

站长之家(Chinaz.com)12月28日消息据外媒消息称,微软将于明年停止为SQL Server 2005提供技术支持,即不再为其提供新的安全补丁、新功能、应用升级等服务。且表示在停止技术支持后,...

掌握C语言多线程:高效并发编程指南

一、多线程基础概念介绍多线程编程是现代软件开发中提高程序性能和响应性的重要技术。在C语言中,pthread(POSIX Threads)库是实现多线程编程的标准工具。本节将通俗易懂地介绍多线程的核心概...

Qt QWaitCondition 的正确使用方法

简单用法QWaitCondition 用于多线程的同步,一个线程调用QWaitCondition::wait() 阻塞等待,直到另一个线程调用QWaitCondition::wake() 唤醒才继续往...

Linux系统编程:条件变量为什么要用锁

条件变量可以解决线程同步和共享资源访问的问题,条件变量是对互斥锁的补充,它允许一个线程阻塞并等待另一个线程发送的信号,当收到信号时,阻塞的线程被唤醒并试图锁定与之相关的互斥锁。具体定义如下:等待:in...

大量类加载器创建导致诡异FullGC(类的加载器有什么用)

“ 由 GC 问题带你全面了解 JDK8 Metaspace”01—现象最近接手了一个同事的项目,某一天接口的响应耗时突然增加了很多,由几十ms 增加到了几十秒。首先查看机器上的日志,有调用第三方接口...