11.28 限定某个目录禁止解析php
在一些静态文件目录(如upload)应禁止解析PHP,否则容易产生安全隐患。
编辑虚拟主机配置文件
php_admin_flag engine off
测试结果
[root@linux-5 upload]# curl -x 192.168.88.5:80 def.com/upload/ceshi.php
echo "def.com";
如上述结果所示,规则已成功生效。虽然PHP已不能解析,但是访问结果会返回源代码,同样存在着数据泄露的风险,因此应结合FilesMatch,将静态文件目录访问PHP的权限完全禁止。
Order allow,deny
Deny from all
php_admin_flag engine off
Order allow,deny
Deny from all
11.29 限制user_agent
user_agent可以理解为浏览器标识
CC攻击的特性:user_agent相同,并发量高。日常如果遇到疑似CC攻击,可通过限制user_agent的方式来缓解服务器的压力。
编辑虚拟主机配置文件
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
NC代表忽略大小写,OR代表与其他条件为或者的关系,如果不加OR则与其他条件为并且的关系。
【F】代表forbidden的意思
结果测试
[root@linux-5 ~]# curl -x 192.168.88.5:80 def.com -I
HTTP/1.1 403 Forbidden
Date: Mon, 04 Jun 2018 07:10:16 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1
[root@linux-5 ~]# curl -A "lem lem" -x 192.168.88.5:80 def.com -I
HTTP/1.1 200 OK
Date: Mon, 04 Jun 2018 07:19:30 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
X-Powered-By: PHP/5.6.32
Cache-Control: max-age=0
Expires: Mon, 04 Jun 2018 07:19:30 GMT
Content-Type: text/html; charset=UTF-8
curl -A 选项可以自定义user_agent
11.30/11.31 php相关配置
在修改PHP的配置文件前,首先要找到php.ini文件的位置,我们可以用phpinfo或者php -i去查找,但是PHP在Apache上是一个模块,二者并没有绝对的联系,因此很可能修改的不是同一个php.ini文件
/usr/local/php/bin/php -i|grep -i "loaded configuration file" //可能不准确
通过目标网站下的phpinfo进行查找
disable_functions(安全函数)
eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,
chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,
openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close
这些函数较为敏感和危险,可在php.ini中禁用掉
date.timezone(时区)
如果不在PHP中定义时区,可能会出现一些告警信息。
错误日志相关
在生产环境中,如果错误直接显示在浏览器上,可能会暴露网站的一些目录信息,存在安全隐患,但是关闭错误显示我们平时出现问题又很难排查,所以我们需要开启错误日志。
display_errors(是否显示错误日志)
log_errors(定义错误日志是否开启)
error_log(定义错误日志存放路径)
error_reporting(定义错误日志的级别)
默认为ALL,把所有日志都进行记录,日志较多,在生产环境中,使用E_ALL & ~E_NOTICE即可。
open_basedir(目录隔离)
在php.ini中修改会针对所有站点生效,具有一定局限性,因此可在虚拟主机配置文件中针对单一站点进行配置open_basedir
php_admin_value open_basedir "/data/wwwroot/def.com:/tmp/"
增加tmp目录的目的,是因为临时文件存于tmp目录下,限制tmp目录可限制上传图片。