如果a目录被黑,这样会被限制到一定范围的目录中,目录最后一定要加上/,比如/tmp/,而不是/tmp
在Nginx配置文件中加入
fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";
通常nginx的站点配置文件里用了include fastcgi.conf;,这样的,把这行加在fastcgi.conf里就OK了。需要重启nginx
在php.ini中加入,这种方式的设置需要重启php-fpm后生效
[HOST=www.server110.com] open_basedir=/home/www/www.server110.com:/tmp/:/proc/ [PATH=/home/www/www.server110.com] open_basedir=/home/www/www.server110.com:/tmp/:/proc/
因为这些函数有的可以调用系统的命令,比如reboot等
修改php.ini,添加如下
disable_functions = show_source,system,shell_exec,passthru,exec,popen,proc_open,proc_get_status,phpinfo
将站点目录比如/usr/local/nginx/html,设置为755,里面文件为644,这样php用户只能读,不能写,即使有漏洞, 黑客也传不了后门, 更不可能挂木马. 这么干之前告知程序员将文件缓存改为 nosql 内存缓存(例如 memcached、redis 等),上传的文件通过接口传到其他服务器(静态服务器)。
程序生成本地缓存是个非常糟糕的习惯,使用文件缓存速度缓慢、浪费磁盘空间、最重要一点是一般情况下服务器无法横向扩展
1.程序一旦出现错误,详细错误信息便立刻展示到用户眼前,其中包含路径、有的甚至是数据库账号密码. 注入渗 透密码基本上都是通过这个报错来猜取。生产环境上强烈关闭它
vim /etc/php.ini
display_errors = On 改为 display_errors = Off
2.关闭php信息,不轻易透露自己 php 版本信息,防止黑客针对这个版本的 php 发动攻击
expose_php = On 改为 expose_php = Off
3.确保 PHP 检查文件全名(当它在文件结尾没有发现.php 它将忽略)
cgi.fix_pathinfo=1 改为 cgi.fix_pathinfo=0
将文件上传到远程服务器,例如 nfs 等。当然也可以调用你们写好的 php 接口. 即使有上传漏洞,那么文件也被 传到了静态服务器上。木马等文件根本无法执行
例如:www.xx.com的静态文件地址为内网的nfs服务器,但是nfs服务器只做存储,并没有安装php,那样上传后也执行不了木马
allow_url_fopen = On 改为 allow_url_fopen = Off
其实这点算不上真正的安全, 并不会导致 web 被入侵等问题,但是这个非常影响性能, 笔者认为它属于狭义的安全问题
以下方法将无法获取远程 url 内容
$data = file_get_contents("http://www.baidu.com/"); 以下方法可以获取本地文件内容 $data = file_get_contents("1.txt");
如果你的站点访问量不大、数据库也运行良好,但是web服务器负载出奇的高,请你直接检查下是否有这个方法。目前生产环境已全线禁用,如果php工程师需要获取远程web的内容,建议他们使用curl。