2018-3-7 11周2次课 限定某个目录禁止解析php限制user_agentphp相关配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-3-7 11周2次课 限定某个目录禁止解析php限制user_agentphp相关配置相关的知识,希望对你有一定的参考价值。

11.28 限定某个目录禁止解析php


禁止php解析:防止被上传有害php文件,而被执行,php中可能有危险的函数,如果开放了上传权限,肯定会被上传恶意木马文件,会被拿到服务器权限,root权限,非常危险。

技术分享图片

更可以在加上FilesMatch访问限制

技术分享图片

检查并重新加载配置文件 -t,graceful


[[email protected] ~]# cd /data/wwwroot/111.com/
[[email protected] 111.com]# mkdir upload
[[email protected] 111.com]# cp 123.php upload/
[[email protected] 111.com]# curl -x127.0.0.1:80 111.com/upload/123.php -I
HTTP/1.1 403 Forbidden
Date: Mon, 05 Mar 2018 14:00:22 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

(已经403了)

先把FilesMatch去除,看下禁止解析php是什么效果

技术分享图片

[[email protected] 111.com]# curl -x127.0.0.1:80 111.com/upload/123.php
<?php
echo "123.php";
?>

(根本无法解析,直接返回了php的源代码,并未解析)


而在浏览器中输入111.com/upload/123.php时,文件准备开始下载,说明无法解析

技术分享图片


在将配置文件,进一步限制

技术分享图片

再访问111.com/upload/123.php时,被禁止访问

技术分享图片





11.29 限制user_agent


user_agent 访问控制的需求背景:网站会受到CC攻击,原理为攻击者通过手段(软件,肉机)让成千上万肉机同时去访问某个站点,站点可能挂掉


CC攻击非常有规律,他们的user_agent非常有规律

技术分享图片



上方为条件,下方位规则

OR为或,user_agent匹配上面条件的或下方的条件,比价OR则为并且,但是不可能同时匹配curl和baidu.com

NC 表示忽略大小写   (user_agent中类似于Mozilla就有大小写)

F为forbidden


curl一下111.com/123.php,被禁止

技术分享图片


查看日志,被限制

技术分享图片


为了证明是user_agent限制的,模拟user_agent,可以直接被访问

[[email protected] 111.com]# curl -A "A4L" -x127.0.0.1:80 111.com/123.php
123.php[[email protected] 111.com]# curl -A "A4L" -x127.0.0.1:80 111.com/123.php -I
HTTP/1.1 200 OK
Date: Mon, 05 Mar 2018 14:36:14 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Content-Length: 7
Content-Type: text/html; charset=UTF-8

查看日志信息,可以看到user_agent就是我们指定的

技术分享图片


·curl常用配置选项:

-e 指定referer (必须 http:// 开头)

-A 指定user_agent

-x 指定ip,相当于省略了hosts

-I 查看状态码


扩展:CC攻击 https://baike.baidu.com/item/cc%E6%94%BB%E5%87%BB/10959545?fr=aladdin





11.30/11.31 php相关配置


·查看php配置文件位置

/usr/local/php/bin/php -i|grep -i "loaded configuration file"

[[email protected] php-7.1.6]# /usr/local/php/bin/php -i|grep -i "loaded configuration file"
PHP Warning:  Unknown: It is not safe to rely on the system's timezone settings. 
You are *required* to use the date.timezone setting or the date_default_timezone_set() function. 
In case you used any of those methods and you are still getting this warning, you most likely 
misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.
timezone to select your timezone. in Unknown on line 0
Loaded Configuration File => /usr/local/php/etc/php.ini


编辑index.php,内容为phpinfo

[[email protected] 111.com]# vim index.php

技术分享图片

浏览器可访问111.com/index.php,为phpinfo

技术分享图片


我们可以看到php配置目录在/usr/local/php7/etc下,但是并没有加载

技术分享图片

既然没有加载,那么可以去源码包中复制

[[email protected] 111.com]# cd /usr/local/src/php-
php-5.6.30/ php-7.1.6/
[[email protected]localhost 111.com]# cd /usr/local/src/php-7.1.6/
[[email protected] php-7.1.6]# cp php.ini-
php.ini-development  php.ini-production
[[email protected] php-7.1.6]# cp php.ini-development /usr/local/php7/etc/php.ini
[[email protected] php-7.1.6]# /usr/local/apache2.4/bin/apachectl graceful

重新加载配置后,可以看到php.ini被加载

技术分享图片


·配置php.ini:

1,限定disable_fuctions(危险函数)

技术分享图片

危险函数: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,phpinfo

有些公司也会将phpinfo给禁掉,因为phpinfo会将系统的一些目录暴露给他人,很危险。


配置完成后,查看111.com/index.php,已经被禁掉

技术分享图片


2,定义date.timezone(时区)

技术分享图片

时区定为Asia/Shanghai 或者 Asia/Chongqing


3,日志相关

display_errors

display_errors 显示错误信息,如果on,打开的话,那么会把错误信息显示在浏览器上,很可能会暴露目录

技术分享图片

那么,设置为off之后,再访问,则会显示白页,那么一切都是未知,不太好找问题所在。

技术分享图片

因此,再讲display_errors改为off之后,需要编辑错误日志log_errors


log_errors

1)log_errors:错误日志打开

技术分享图片


2)错误日志记录到一个目录去,自行更改

技术分享图片


3)还要定义一个error_log的级别,非常严谨的话,那么只会记录一些严重的错误,一些不太严重的错误则不记录,忽被略掉,我么可以放松一些,级别低一点

技术分享图片

生产环境中,一般使用E_ALL & ~E_NOTICE


再次访问,会新生成错误日志

技术分享图片

(php errors.log的属主和属组是deamon,而demon是httpd的属主,php errors.log是以httpd进程的身份生成的。)

[[email protected] php-7.1.6]# cat /tmp/php_errors.log
[06-Mar-2018 11:56:52 UTC] PHP Warning:  phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/index.php on line 2

我们再模拟一个错误,再/data/wwwroot/111.com/目录下创建2.php,内容如下

[[email protected] php-7.1.6]# vim /data/wwwroot/111.com/2.php

技术分享图片

[[email protected] php-7.1.6]# curl -A "A4L" -x127.0.0.1:80 111.com/2.php
[[email protected] php-7.1.6]# curl -A "A4L" -x127.0.0.1:80 111.com/2.php -I
HTTP/1.0 500 Internal Server Error
Date: Tue, 06 Mar 2018 12:09:39 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Connection: close
Content-Type: text/html; charset=UTF-8
[[email protected] php-7.1.6]# cat /tmp/php_errors.log
[06-Mar-2018 11:56:52 UTC] PHP Warning:  phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/index.php on line 2
[06-Mar-2018 12:09:35 UTC] PHP Parse error:  syntax error, unexpected end of file in /data/wwwroot/111.com/2.php on line 4
[06-Mar-2018 12:09:39 UTC] PHP Parse error:  syntax error, unexpected end of file in /data/wwwroot/111.com/2.php on line 4

查看日志可以发现,Parse error比之前Warning更严重


4、open_basedir

        比如一个服务器上跑了很多站点,其中一个站点写的漏洞比较多,被人黑了,被人拿到了权限,那么可定会被进一步渗透,进到另一个站点。

        但是如果增加了open_basedir,那么就有可能黑不了

        A网站在A目录,B网站在B目录,即使被黑,那也是黑一个目录,不会连带其他目录被黑

        修改 /usr/local/php7/etc/php.ini  ( : 为分隔符,分割需要限制的多个目录,默认的临时文件在tmp下,所以要带上tmp目录)

技术分享图片

        php.ini是针对站所有点做限制,但如果有多个网站运行,多个网站运行在同一个文件夹下,那么等于是没有分开限制。

        

        只有针对站点去做open_basedir才行,php.ini做不到,只有在apache的虚拟主机中定义才行

php_admin_value可以定义php.ini中的参数,如error_log,error_reporting,可以针对不同虚拟主机限制不同的open_basedir


·针对不同虚拟主机限制不同的open_basedir

用php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/“限定目录,而针对多个不同的虚拟主机限制不同的open_basedir,可以用上方第一个虚拟主机来限制

技术分享图片

(为什么要带临时文件?因为默认的临时文件在/tmp/下,这样连临时文件都不给写)


[[email protected] php-7.1.6]# curl -A "A4L" -x127.0.0.1:80 111.com/2.php
123[[email protected] php-7.1.6]#



如有错误,欢迎指正,互相学习,共同进步!

以上是关于2018-3-7 11周2次课 限定某个目录禁止解析php限制user_agentphp相关配置的主要内容,如果未能解决你的问题,请参考以下文章

2018-3-7 11周2次课

2018-3-7 Linux学习笔记

2018-2-28 10周1次课

2018-2-27 9周5次课

11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31

11.28 限定某个目录禁止解析php;11.29 限制user_agent;11.30-11.31