一.限制站点目录防止跨站访问
如果a目录被黑,这样会被限制到一定范围的目录中,目录最后一定要加上/,比如/tmp/,而不是/tmp
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/
二.禁用不安全的PHP函数
disable_functions = show_source,system,shell_exec,passthru,exec,popen,proc_open,proc_get_status,PHPinfo
三.PHP用户对站点目录只读权限
将站点目录比如/usr/local/Nginx/html,设置为755,里面文件为644,这样PHP用户只能读,不能写,即使有漏洞, 黑客也传不了后门, 更不可能挂木马. 这么干之前告知程序员将文件缓存改为 nosql 内存缓存(例如 memcached、redis 等),上传的文件通过接口传到其他服务器(静态服务器)。
程序生成本地缓存是个非常糟糕的习惯,使用文件缓存速度缓慢、浪费磁盘空间、最重要一点是一般情况下服务器无法横向扩展
四.PHP优化
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,那样上传后也执行不了木马
六.禁用cul
allow_url_fopen = On
改为
allow_url_fopen = Off
其实这点算不上真正的安全, 并不会导致 web 被入侵等问题,但是这个非常影响性能, 笔者认为它属于狭义的安全问题
$data = file_get_contents("http://www.baidu.com/");
以下方法可以获取本地文件内容
$data = file_get_contents("1.txt");
如果你的站点访问量不大、数据库也运行良好,但是web服务器负载出奇的高,请你直接检查下是否有这个方法。目前生产环境已全线禁用,如果PHP工程师需要获取远程web的内容,建议他们使用curl。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。