限定某个目录禁止解析php

[toc]

限定某个目录禁止解析php&限制user_agent

一、 限定某个目录禁止解析php

有这样一种情况,有些站点和论坛是允许上传图片到服务器,但是这就给黑客留下了可进入服务器的大门,他们上传一些php或者js到服务器,然后被我们执行加载,有些函数可以让黑客获取最大的权限,从而对数据造成威胁! 为了避免这种事情的发生,我们需要限制上传类型。

1. 打开配置文件 httpd-vhosts.conf

在虚拟服务器中增加如下配置:

[root@xavi ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 

2.凡是在upload目录中的php均不解析!并且匹配任意.php的文件,全部拒绝访问!

      <Directory /data/wwwroot/xavi.com/upload>
        php_admin_flag engine off //禁止php解析,所有访问都报403错误
       <FilesMatch (.*)\.php(.*)>//需要转义字符
       Order allow,deny //不加deny,它会访问源代码
       Deny from all
       </FilesMatch>

2.-t,-gracful,检查语法并开启httpd

[root@xavi ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK

[root@xavi ~]#  /usr/local/apache2.4/bin/apachectl graceful

3.创建upload目录,以及在upload目录下创建123.php去测试。但未得到403结果

[root@xavi ~]# mkdir upload

[root@xavi ~]# ls
123.txt  anaconda-ks.cfg  httpd-2.4.29.tar.gz   rsync      test2
321.txt  awk              index.php             sed        upload
556.txt  grep             initial-setup-ks.cfg  split_dir  xaa
admin    httpd-2.4.29     [root@localhost       test1

[root@xavi ~]# cp index.php upload/
[root@xavi ~]# curl -x127.0.0.1:80 'http://xavi.cpm
[root@xavi ~]# curl -x127.0.0.1:80 'http://xavi.com/admin.php?adadede' -I
HTTP/1.1 404 Not Found
Date: Sun, 11 Mar 2018 03:33:57 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

4.找到犯错原因,得到验证结果

这里之所以没有得到403 fobiden的提示,是因为在练习测试过程我忽略了,指令执行的环境。[root@xavi xavi.com]上述操作正确的过程是应该在/xavi.com 文件夹下操作,而不是在默认的文件路径下

以下是重新操作的过程

[root@xavi ~]# cd /data/wwwroot/xavi.com
[root@xavi xavi.com]# ls
123.php  admin  index.php  xavi.jpg  xavi.txt
[root@xavi xavi.com]# mkdir uplaod

[root@xavi xavi.com]# ls
123.php  admin  index.php  uplaod  xavi.jpg  xavi.txt
[root@xavi xavi.com]# mv uplaod upload
[root@xavi xavi.com]# ls
123.php  admin  index.php  upload  xavi.jpg  xavi.txt
[root@xavi xavi.com]# cp 123.php /upload
[root@xavi xavi.com]# !vim
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
[root@xavi xavi.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@xavi xavi.com]#  /usr/local/apache2.4/bin/apachectl graceful
[root@xavi xavi.com]# !curl
curl -x127.0.0.1:80 'http://xavi.com/upload/123.php' -I
HTTP/1.1 403 Forbidden
Date: Sun, 11 Mar 2018 05:31:04 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

mark

5.测试下没有FilesMatch那段话的结果

mark

无法解析,直接显示内原代码

[root@xavi xavi.com]# !vim
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
[root@xavi xavi.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@xavi xavi.com]#  /usr/local/apache2.4/bin/apachectl graceful
[root@xavi xavi.com]# curl -x127.0.0.1:80 'http://xavi.com/upload/123.php' 
<?php
echo "123.php";

mark

总结,如上当你访问.php文件时,直接拒绝,没有任何机会去访问,更别提执行了!如果程序员让upload可以允许解析,那只有说明他不合格!静态文件存储的地方是不允许放php的。没有考虑到任何数据安全!!!

二、 访问控制,限制user_agent

1.什么是user_agent(浏览器标识)

User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

2.cc攻击,肉鸡

cc攻击:是我们经常见到的最常见的一种攻击,几乎每天每个时段都会存在。CC攻击就是黑客利用所能利用的肉鸡(就是所谓的黑客利用技术手段攻击下来的他人服务器)去攻击(正常的访问)你的站点,导致你的站点不可以被正常的用户所浏览。但是也不是不可防止,在攻击的时候有一个规律的特征,user_agent是一致的(其referer和访问页面是一致的,并且在一秒内发动N次访问)!

3.核心配置文件

<IfModule mod_rewrite.c>  //rewrite跳转,并建立规则
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
   </IfModule>

代码解析:

RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]   //匹配Curl的访问   [NC,OR] NC:忽略大小写。 OR:是或者的意思,要么这一条,要么下一条满足情况
RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
RewriteRule  .*  -  [F]   // F:Forbidden 禁止

mark

4.测试,使用Curl方式访问直接被禁掉

[root@xavi xavi.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@xavi xavi.com]#  /usr/local/apache2.4/bin/apachectl graceful
[root@xavi xavi.com]# curl -x127.0.0.1:80 'http://xavi.com/upload/123.php' -I
HTTP/1.1 403 Forbidden
Date: Sun, 11 Mar 2018 07:04:12 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

mark

5.使用curl -A :随意指定自己这次访问所宣称的自己的浏览器信息。

[root@xavi xavi.com]# curl -A "xavilinux xavilinux" -x127.0.0.1:80 'http://xavi.com/123.php' -I
HTTP/1.1 200 OK
Date: Sun, 11 Mar 2018 07:21:42 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Content-Type: text/html; charset=UTF-8
  • 改变浏览方式即可访问。

6。查看日志文件: tail /usr/local/apache2.4/logs/xavi.com-access_20180311.log

[root@xavi xavi.com]# tail /usr/local/apache2.4/logs/xavi.com-access_20180311.log
192.168.72.1 - - [11/Mar/2018:14:02:02 +0800] "GET /upload/123.php HTTP/1.1" 200 22 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
192.168.72.1 - - [11/Mar/2018:14:02:02 +0800] "GET /upload/123.php HTTP/1.1" 200 22 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
127.0.0.1 - - [11/Mar/2018:15:04:12 +0800] "HEAD http://xavi.com/upload/123.php HTTP/1.1" 403 - "-" "curl/7.29.0"
127.0.0.1 - - [11/Mar/2018:15:04:12 +0800] "HEAD http://xavi.com/upload/123.php HTTP/1.1" 403 - "-" "curl/7.29.0"
127.0.0.1 - - [11/Mar/2018:15:05:32 +0800] "GET http://xavi.com/upload/123.php HTTP/1.1" 403 223 "-" "curl/7.29.0"
127.0.0.1 - - [11/Mar/2018:15:05:32 +0800] "GET http://xavi.com/upload/123.php HTTP/1.1" 403 223 "-" "curl/7.29.0"
127.0.0.1 - - [11/Mar/2018:15:21:42 +0800] "HEAD http://xavi.com/123.php HTTP/1.1" 200 - "-" "xavilinux xavilinux"
127.0.0.1 - - [11/Mar/2018:15:21:42 +0800] "HEAD http://xavi.com/123.php HTTP/1.1" 200 - "-" "xavilinux xavilinux"
127.0.0.1 - - [11/Mar/2018:15:22:18 +0800] "GET http://xavi.com/123.php HTTP/1.1" 200 7 "-" "xavilinux xavilinux"
127.0.0.1 - - [11/Mar/2018:15:22:18 +0800] "GET http://xavi.com/123.php HTTP/1.1" 200 7 "-" "xavilinux xavilinux"

实用扩展:

apache 禁止trace或track防止xss攻击 http://ask.apelearn.com/question/1045

三、PHP相关配置

1.寻找PHP相关配置文件

每次再次开启虚拟机,要注意当前所在文件目录的位置

[root@xavi ~]# cd /data/wwwroot/xavi.com
[root@xavi xavi.com]# ls
123.php  admin  index.php  upload  xavi.jpg  xavi.txt

编辑当前位置的index.php文件

[root@xavi xavi.com]# !vim
vim index.php

<?php
phpinfo();

打开网页,查看其加载情况 Loaded Configuration File没有加载

mark

2.查找php配置文件

[root@xavi php-7.1.6]# /usr/local/php7/bin/php -i | grep -i 'loaded configuration file'
Loaded Configuration File => /usr/local/php7/etc/php.ini   

3.复制配置文件,在gracful刷新配置文件后,刷新index.php

[root@xavi xavi.com]# cd /usr/local/src/php-7.1.6/
[root@xavi php-7.1.6]# cp php.ini-development /usr/local/php7/etc/php.ini
[root@xavi php-7.1.6]#  /usr/local/apache2.4/bin/apachectl graceful

mark

4.编辑配置文件:/usr/local/php7/etc/php.ini

[root@xavi php-7.1.6]# vim /usr/local/php7/etc/php.ini

在vim内搜索 /disable_functions

如下就是通常被认为比较危险的函数:

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,phpinfo

mark

其中第一个eval函数就是上个文章提到的木马文件所调用的函数。如果禁掉了这个函数,就算可以上传php文件也是不能执行的。

关于phpinfo可以展现所有关于php的信息,如果被黑客看到就不堪设想了。所以好多企业为了更加安全会把phpinfo也会禁止掉!

  • 但是当我们禁掉PHP的时候,当你访问phpinfo他也还是会在浏览器中显示错误信息:
  • 本次测试我并未得到该结果,而是正常显示phpinfo界面

mark

找到错误原因:phpinfo前面未被识别,也无报错,因为自己把所有函数自行分段了,而不是整体复制

mark

mark

mark

黑客比较严谨,也还是会通过此路径找到相关配置,所以为了防止在浏览器中显示,我们也可以把这些信息全部关掉!

5.在php.ini中定义time.zone如果不定义,会出报警信息

[root@xavi php-7.1.6]# vim /usr/local/php7/etc/php.ini

找到time.zone mark

6.在浏览器中显示,我们也可以把这些信息全部关掉!

mark

6.1搜素 /display ,改为off即可。

display_errors = Off

6.2然后再去配置一下log_error

log_errors = On

6.3 然后再次去定义错误日志的路径:

搜索 /error_log, 修改到/tmp下。

error_log = /tmp/php_errors.log

6.4 为了更加直观的看到日志内容,我们需要设置日志的等级:

搜索 /error_reporting

error_reporting = E_ALL & ~E_NOTICE 在生产环境中,最常用的就是这个!有时候出现notice并不是出错

mark 没有权限访问

7.测试

[root@xavi php-7.1.6]# curl -x127.0.0.1:80 http://xavi.com/index.php -I
HTTP/1.1 403 Forbidden
Date: Sun, 11 Mar 2018 09:34:23 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1
[root@xavi php-7.1.6]# curl -A "xavi" -x127.0.0.1:80 http://xavi.com/index.php -I
HTTP/1.1 200 OK
Date: Sun, 11 Mar 2018 09:36:57 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Content-Type: text/html; charset=UTF-8

mark

[root@xavi php-7.1.6]# touch /tmp/php_errors.log
[root@xavi php-7.1.6]# chmod 777 /tmp/php_errors.log
[root@xavi php-7.1.6]# ls -l /tmp/php_errors.log
-rwxrwxrwx 1 root root 0 3月  11 17:52 /tmp/php_errors.log
[root@xavi php-7.1.6]# cat /tmp/php_errors.log
[root@xavi php-7.1.6]#  /usr/local/apache2.4/bin/apachectl graceful
[root@xavi php-7.1.6]# curl -A "xavi" -x127.0.0.1:80 http://xavi.com/index.php -I
HTTP/1.1 200 OK
Date: Sun, 11 Mar 2018 09:57:50 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Content-Type: text/html; charset=UTF-8

[root@xavi php-7.1.6]# vim /data/wwwroot/xavi.com/2.php
[root@xavi php-7.1.6]# curl -A "xavi" -x127.0.0.1:80 http://xavi.com/2.php -I
HTTP/1.1 200 OK
Date: Sun, 11 Mar 2018 10:00:42 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Content-Type: text/html; charset=UTF-8
  • 没有500错误代码??????

[root@xavi php-7.1.6]# curl -x 192.168.72.130:80 xavi.com/2.php -I    
HTTP/1.1 403 Forbidden
Date: Sun, 11 Mar 2018 10:15:00 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

[root@xavi php-7.1.6]# curl -x 192.168.72.130:80 xavi.com/index.php -I    
HTTP/1.1 403 Forbidden
Date: Sun, 11 Mar 2018 10:15:23 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

[root@xavi php-7.1.6]# !cat
cat /tmp/php_errors.log
[11-Mar-2018 18:14:46 Asia/shanghai] PHP Parse error:  syntax error, unexpected end of file in /data/wwwroot/xavi.com/2.php on line 4

四、 PHP相关配置 open_basedir

如果有一台服务器跑了很多个站点,其中就有一个站的程序写的很烂,漏洞百出,被黑客所劫持,只要一台被劫持,其它的服务器也就很快被搞定。为了防止这样的事情发生,如何搞定呢?

针对不同的虚拟主机限定不同的open_basedir

[root@xavi php-7.1.6]# vim /usr/local/php/etc/php.ini
open_basedir = /usr/local/wwwroot/xavi.com:/tmp //多个目录用:隔开,这个说明PHP限制在这两个目录活动

一致没有500报错

[root@xavi php-7.1.6]# cat /tmp/php_errors.log
[11-Mar-2018 18:14:46 Asia/shanghai] PHP Parse error:  syntax error, unexpected end of file in /data/wwwroot/xavi.com/2.php on line 4

1.针对不同的虚拟主机限定不同的open_basedir

1.1 打开配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

1.2 增加如下配置:

php_admin_value open_basedir "/data/wwwroot/xavi.com/:/tmp/"

为什么要添加/tmp呢?

是因为/tmp下有咱们的错误日志,并且有些论坛允许上传图片也都是先上传到tmp目录下,然后再次转到upload下!

mark

猜你喜欢

转载自my.oschina.net/u/3960917/blog/2885281