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

访问控制 – 禁止php解析目录概要

  • 核心配置文件内容
   <Directory /data/wwwroot/www.123.com/upload>
       php_admin_flag engine off
   </Directory>
  • curl测试时直接返回了php源代码,并未解析

案例

  • 假设有一个目录是可以上传图片,但是可能被有心之人上传php上去,因为httpd开放了php模块,所以如果被人上传了木马文件(php类型),httpd就有可能会进行执行,一旦执行,就会让对方获得我们服务器的root权限,或者是被恶意删除或修改一些参数,导致服务器瘫痪或者是被攻击
  • 案例:
    • 一台服务器,网站被入侵,但不知道是什么原因,不知道怎么入侵的,也不知道入侵到什么程度,只知道他们公司的数据库泄露了,数据是一些电话号码,黑客并没有去删除数据,因为他知道这个服务器的数据库里,电话号码每天都在增长,它就可以源源不断的获得新的电话号码,获得的电话号码可以卖给第三方;
  • 分析:
    • 把一个没有在这个服务器提交过的电话号码,在这个服务器的网站上提交一次,结果,马上就有人打电话过来,证明,黑客获得电话号码,到打电话给新的用户,这套体系,已经完全自动化了(每天都会去抓取一个新的电话号码来队列,然后马上卖给第三方,第三方马上打电话给这个用户),所以就猜测,网站的程序(php)存在漏洞,另一种可能就是sql注入的漏洞(可以把查询的sql通过一些特殊的提交,提交到服务器上,服务器就会把这个sql语句转换成正常的查询,最终获得一些数据回来);但是sql注入漏洞,很容易修复,只要在网站提交的入口,增加一些特殊符号的过滤,就能完全的阻断sql注入的漏洞。
  • 解决方法:
    • 首先抓包,监控数据的查询,因为电话号码是通过查询了数据来的,写一个死循环的脚本,每隔一分钟抓一次查询数据,抓完以后生成一个日志文件,
    • 查看日志以后,发现有一条sql查询,和网站源生的查询不一样,通过日志定位到了时间点,然后就去web服务器上查看时间点的访问日志,通过日志查看到了一个非常特殊的请求,名字是以php结尾的文件,而且这个php文件是在图片的目录下进行访问的,然后去查看这个php 文件,发现这个文件内容,是获取服务器的权限,相当于在服务器开了一个后门;这个问题产生的根本原因,就是因为上传图片目录并没有禁止解析php

sql注入

  • 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。[1] 比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击..

访问控制 – 禁止php解析

  1. 打开虚拟主机主机配置文件
[root@hf-01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

把代码放入到配置文件中
 <Directory /data/wwwroot/111.com/upload>
         ##把upload目录下所有的php禁止解析
        php_admin_flag engine off        //禁止解析php
        <FilesMatch (.*)\.php(.*)>        //现在这里所有访问php都会是403
        ##这里的 .用\脱义
        Order allow,deny                //如果不做这个deny,就会直接访问到源代码,这样就不太友好
        Deny from all
        </FilesMatch>

然后保存退出
  1. 检查配置文件是否存在语法错误,并重新配置文件
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 111.com]# 
  1. 创建upload目录,新建php文件
[root@hf-01 111.com]# mkdir upload
[root@hf-01 111.com]# ls
123.php  admin  index.php  QQ111.jpg  upload
[root@hf-01 111.com]# cp 123.php upload/
[root@hf-01 111.com]# 
  1. curl访问
[root@hf-01 111.com]# curl -x127.0.0.1:80 '111.com/upload/123.php' -I
HTTP/1.1 403 Forbidden
Date: Tue, 26 Dec 2017 16:09:43 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 111.com]# 
  1. 这时在去虚拟主机配置文件中注释掉FilesMatch
[root@hf-01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 <Directory /data/wwwroot/111.com/upload>
     ##把upload目录下所有的php禁止解析
        php_admin_flag engine off
        #<FilesMatch (.*)\.php(.*)>
        ##这里的 .用\脱义
        #Order allow,deny
        #Deny from all
        #</FilesMatch>
    </Directory>
然后保存退出
  1. 检查配置文件是否存在语法错误,并重新配置文件
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 111.com]# 
  1. 这时候访问php,会发现无法解析php
[root@hf-01 111.com]# !curl
curl -x127.0.0.1:80 '111.com/upload/123.php'
<?php
echo "123.php";
[root@hf-01 111.com]# 
  1. 在浏览器中访问http://111.com/upload/123.php,会提示直接下载,这是因为无法解析php

输入图片说明

  1. 这时候再打开虚拟主机配置文件,取消FilesMatch注释

<Directory /data/wwwroot/111.com/upload>
     ##把upload目录下所有的php禁止解析
        php_admin_flag engine off
        <FilesMatch (.*)\.php(.*)>
        ##这里的 .用\脱义
        Order allow,deny
        Deny from all
        </FilesMatch>
    </Directory>

  1. 检查配置文件是否存在语法错误,并重新配置文件
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 111.com]# 
  1. 这时再去浏览器访问php,会直接显示Forbidden

输入图片说明

  1. 即使去访问一个不存在的php文件,也会显示显示Forbidden

总结

  • 禁止php解析操作,其实就是为了服务器更加安全,特别是针对可以写的目录
  • 可写的目录,一般是不需要解析php,这个需要牢记,一般静态文件存放的目录是不允许解析php 的

转载于:https://my.oschina.net/u/3707314/blog/1595065

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值