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

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]alhost 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]#

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

原文地址:http://blog.51cto.com/11530642/2083656

时间: 2024-12-17 20:57:19

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

2018.3.7 11周2次课

十一周二次课(3月7日) 11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31 php相关配置 11.28 限定某个目录禁止解析php 对于使用PHP语言编写的网站,有一些目录是有需求上传文件的,比如在前面列举的那个防盗链案例,因为服务器可以上传图片,并且没有做防盗链,所以被人家当成了一个图片存储服务器,并且盗用带宽流量.如果网站代码有漏洞,让黑客上传了一个用PHP代码写的木马,由于网站可以执行PHP程序,最终会让黑客拿到服务器权限.为了避免这种情

11.28 限定某个目录禁止解析php;11.29 限制user_agent;11.30,11.31 php相关配置(上下)

扩展: apache开启压缩  http://www.aminglinux.com/bbs/thread-5528-1-1.html apache2.2到2.4配置文件变更  http://www.aminglinux.com/bbs/thread-7292-1-1.html apache options参数  http://www.aminglinux.com/bbs/thread-1051-1-1.html apache禁止trace或track防止xss  http://www.aming

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

扩展 : apache开启压缩 : http://ask.apelearn.com/question/5528 apache2.2到2.4配置文件变更 : http://ask.apelearn.com/question/7292 apache options参数 : http://ask.apelearn.com/question/1051 apache禁止trace或track防止xss : http://ask.apelearn.com/question/1045 apache 配置htt

11.28限定某个目录禁止解析php11.29限制user_agent11.30-31php相关配置

11.28 限定某个目录禁止解析php例如一些目录允许上传图片,为防止有人上传带有病毒php文件,所以禁止php解析,一般存放静态的文件上的目录是不允许解析PHP文件的重新加载配置文件 创建upload目录,访问提示403状态码在浏览器打开是无法打开的,连访问的机会都没有将下图的注释掉再重新加载后测试,这时候不能解析了,显示它的源代码在浏览器打开提示下载11.29 限制user_agentvim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf重

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

11.28 限定某个目录禁止解析php 核心配置文件内容<Directory /data/wwwroot/www.123.com/upload>php_admin_flag engine off</Directory>curl测试时直接返回了php源代码,并未解析 curl -x127.0.0.1:80 'http://123.com/upload/123.php' 11.29 限制user_agent user_agent可以理解为浏览器标识核心配置文件内容<IfModul

2018.3.6 11周1次课

十一周一次课(3月6日) 11.25 配置防盗链 11.26 访问控制Directory 11.27 访问控制FilesMatch 11.25 配置防盗链 通过限制referer来实现防盗链的功 防盗链,通俗讲,就是不让别人盗用你网站上的资源.这个资源,通常指的是图片.视频.歌曲.文档等.referer是指:你通过A网站的一个页面http://a.com/a.html里面的链接去访问B网站的的一个页面http://b.com/b.html,那么这个B网站页面的referer就是http://a.

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

[[email protected] php-7.1.6]# vim /usr/local/php7/etc/php.ini 没有显示错误信息 错误日志存放路径 [[email protected] php-7.1.6]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 原文地址:https://www.cnblogs.com/sisul/p/8511964.html

2018.3.1 10周2次课

十周第二次课(3月1日) 11.14/11.15 Apache和PHP结合 11.16/11.17 Apache默认虚拟主机 11.14/11.15 Apache和PHP结合 配置httpd支持php httpd主配置文件/usr/local/apache2.4/conf/httpd.conf vim /usr/local/apache2.4/conf/httpd.conf   //修改以下4个地方 ServerName 搜索ServerName,把#ServerName www.example

2018.1.9 5周2次课

五周第二次课(1月9日) 7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装 7.6 yum更换国内源 1.恢复之前备份的文件 2. 进入"/etc/yum.repos.d"目录 3.删除"CentOS-Base.repo"文件 4.下载"163.repo"文件 wget http://mirrors.163.com/.help/CentOS7-Base-163.repo curl -O http://mirrors