lnmp架构下PHP安全配置
1. 使用open_basedir限制虚拟主机跨目录访问(限制php在指定的目录里活动)
2. 禁用不安全PHP函数
disable_functions = show_source,system,shell_exec,passthru,exec,popen,proc_open,proc_get_status,phpinfo
3. php 用户只读
例如站点 www.share.com 根目录 用户与组为 nobody,而运行 php 的用户和组为 phpuser。目录权限为 755,文件权限为 644. 如此,php 为只读, 无法写入任何文件到站点目录下。也就是说用户不能上传文件,即使有漏洞, 黑客也传不了后门, 更不可能挂木马. 这么干之前告知程序员将文件缓存改为 nosql 内存缓存(例如 memcached、redis 等),上传的文件通过 接口传到其他服务器(静态服务器)。
4. 关闭php错误日志
display_errors = On 改为 display_errors = Off
5. php 上传分离
将文件上传到远程服务器,例如 nfs 等。当然也可以调用写好的 php 接口, 即使有上传漏洞,那么文件也被传到了静态服务器上, 木马等文件根本无法执行.
6. 关闭php信息
expose_php = On
改为
expose_php = Off
隐藏自己 php 版本信息,防止黑客针对这个版本的 php 发动攻击
7. 禁止动态加载链接库
disable_dl = On; 改为
enable_dl = Off;
8. 禁用打开远程url
allow_url_fopen = On 改为
allow_url_fopen = Off
其实这点算不上真正的安全, 并不会导致 web 被入侵等问题,但是这个非常影响性能.
以下方法将无法获取远程 url 内容
$data = file_get_contents("http://www.baidu.com/");
以下方法可以获取本地文件内容
$data = file_get_contents("test.txt");