1、限定某个目录禁止解析PHP
核心配置文件
<Directory /data/wwwroot/www.123.com/upload>
php_admin_flag engin off //禁止解析php
<filesmatch *.php(.*)> //避免直接访问到源代码
Order allow,deny
Deny from all
</filesmatch>
</Directory>
如果不禁止访问源码,则在禁止解析php后,进行访问时,会直接显示源代码
禁止访问源码后,再进行访问时,则不会显示源码
2、限制user_agent
user_agent可以理解为浏览器标识
为了防御CC攻击,CC攻击的特点是所有数据包的user_agent是一致的
核心配置文件
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_ANENT} .*curl.*[NC,OR] //与下一句是或的关系,如果不加OR,就为与的关系,NC是忽略大小写
RewriteCond %{HTTP_USER_ANENT} .*baidu.com.*[NC] //与上一句是或的关系
RewriteRule .* -[F] //参数F是指forbidden
</IfModule>
此时使用curl进行访问时,会显示为403
而模拟user_agent进行访问时,则可以正常访问
查看访问日志,可以看出此请求的user_agent是被指定的
使用curl -A可以指定user_agent
使用curl -e “http:// 可以指定referer
使用curl -x,省略hosts
使用-I选项,只查看状态码
3、PHP相关配置
查看php配置文件位置
/usr/local/php/bin/php -i |grep -i "loaded configuration file" 此种方法有时不够准确
使用phpinfo是最准确:在站点目录下,创建phpinfo页面,通过浏览器查看配置文件在哪,然后再进行修改
1.在站点目录下创建phpinfo页面
2.访问phpinfo页面,查找配置页面位置,由下图可以看出配置文件位置为/usr/local/php7/etc,但并未调用配置文件
3.复制配置文件模版到/usr/local/php7/etc目录下
cp /usr/local/src/php-7.1.6/php.ini-development /usr/local/php7/etc/php.ini
4.重新加载配置/usr/local/apache2.4/conf/apachectl graceful,然后刷新浏览器页面,可以看到页面的配置文件
5.打开配置文件,修改配置文件,可以对以下参数进行配置
disable_function 安全参数,可以禁止某些不安全的函数
可以在disable_function中禁止以上不安全函数
定义data.timezone 定义时区,可以定义到重庆或上海
定义日志相关参数。
默认情况下,会将错误信息打印在浏览器上, 这样会造成系统安全性降低
可以通过修改参数display_error = Off来解决,重新加载配置文件后,再进行访问时,就无法在浏览器页面查看到错误信息
使用curl进行访问时,没有任何输出
如果需要查看错误信息,可以通过配置错误日志来解决。
log_error = On //打开错误日志记录开关
error_log = /tmp/php_errors.log //定义错误日志路径
error_ reporting = E_NOTICE //E_ALL表示记录所有的错误日志,生产环境中建议使用E-NOTICE
然后就可以查看到/tmp目录下生产了日志文件,且日志文件的属主和属组都是daemon
通过查看httpd的信息,可以发现daemon是httpd的属主,标明错误日志是以该进程的属主来进行的,因此如果以后发现无法生成日志文件,可以查看该进程是否有写权限
open_basedir //隔离站点的目录,用来防止由于某个站点出现问题而连累其他站点,增加该选项后,用户只能在该目录下操作
open_basedir = /data/wwwroot/111.com:/tmp/
当服务器上一个目录下存在多个站点时,该参数无法起到作用。可以在虚拟主机配置文件中进行修改,增加如下配置
php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/",可以在每个配置文件中的虚拟主机配置进行配置,以此来解决一个目录下存在多个站点