使用open_basedir 限制虚拟主机跨目录访问php
....mysql
[HOST=www.xxxx.com]linux
open_basedir=/data/site/www.xxx.com/:/tmp/web
[HOST=test.xxxx.com]sql
open_basedir=/data/site/test.xxxx.com/:/tmp/shell
如上配置的意思是 www.xxxx.com 下的 php 程序被限制在 open_basedir 配置的两个目录下, 不能够访问到其余目录。若是没有作以上的配置,那么 test.xxxx.com 与 www.xxxx.com 的程序能够互相访问.数据库
若是其中一个站点有漏洞被***植入了 webshell,那么他能够经过这个站点拿下同一台服务器的其余站点,最后挂***.安全
[warning]注意:目录最后必定要加上/. 好比你写/tmp,你的站点同时存在/tmp123 等等以/tmp 开头的目录,那么***也能够访问到这些目录,另外, php5.3 以上支持这个写法,5.2 不支持。[/warning]服务器
2.禁用不安全的php函数ide
disable_functions = show_source,system,shell_exec,passthru,exec,popen,proc_open,proc_get_status,phpinfo
禁止 php 执行以上 php 函数,以上 php 程序能够执行 linux 命令, 好比能够执行 ping、netstat、mysql 等等.若是你的系统有提权 bug,后果你懂得.
3.php用户只读
4.关闭php错误日志
display_errors = On
改成
display_errors = Off
程序一旦出现错误,详细错误信息便马上展现到用户眼前,其中包含路径、有的甚至是数据库帐号密码. 注入***密码基本上都是经过这个报错来猜取。生产环境上强烈关闭它
5.php上传分离
将文件上传到远程服务器,例如 nfs 等。固然也能够调用大家写好的 php 接口. 即便有上传漏洞,那么文件也被传到了静态服务器上。***等文件根本没法执行.
举个例子:
php 站点 www.xxx.com,目录/data/site/www.xxx.com
静态文件站点 static.xxx.com,目录/data/site/static.xxx.com
文件直接被传到了/data/site/static.xxx.com,上传的文件没法经过 www.xxx.com 来访问,只能使用
static.xxx.com 访问,可是 static.xxx.com 不支持 php.
6.关闭php 信息
expose_php = On
改成
expose_php = Off
不轻易透露本身 php 版本信息,防止***针对这个版本的 php 发动***.
7.禁止动态加载连接库
disable_dl = On;
改成
enable_dl = Off;