原创安全问题解决——启用了不安全的HTTP方法

Posted 软件测试资源共享站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创安全问题解决——启用了不安全的HTTP方法相关的知识,希望对你有一定的参考价值。

作为安全测试接口人,常常在自测中发现“启用了不安全的测试方法”这类常见的问题,本文针对此类问题,从问题由来、问题排查到问题解决进行了详细说明。


1、八种主要HTTP方法介绍

 

1.1 方法由来

HTTP协议提供了集中请求方式每种请求方式都有不同的作用,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法:GET, POST HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE CONNECT 方法。

 

1.2 方法详述

1) GET方法:GET是最常用的方法,它的作用是获取服务器中的某个资源。如图所示,客户端用GET方法发起了一次HTTP请求然后服务端将对应的资源返回给客户端

 


2) POST方法:POST请求通常会用来提交html的表单,将表单中填好的数据会被传输给服务器,然后由服务器对这些数据进行处理。

【原创】安全问题解决——启用了不安全的HTTP方法

 

3) PUT方法:与GET从服务器读取资源相反,PUT方法会向服务器写入资源, 有些发布系统允许用户创建Web页面,并用PUT直接向其传输到Web服务器中。PUT方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,如果那个URL已经存在的话,就用这个资源来替代它。

 

【原创】安全问题解决——启用了不安全的HTTP方法

 

4) DELETE方法: 用于删除请求URL上的某个资源该请求返回状态有以下3

200:表示删除请求被成功执行,返回被删除的资源

202:表示删除请求被接受,但还没有被执行

204:表示删除请求被执行,但没有返回被删除的资源

【原创】安全问题解决——启用了不安全的HTTP方法

 

5) HEAD方法HEAD方法与GET方法的行为很类似但服务器在响应中只返回首部不会返回实体的主体部分这就允许客户端在未获取实际资源的情况下对资源的首部进行检查使用HEAD可以在不获取资源的情况下了解资源的情况比如判断其类型);通过查看响应中的状态码看看某个对象是否存在通过查看首部测试资源是否被修改了服务器开发者必须确保返回的首部与GET请求所返回的首部完全相同遵循HTTP/1.1规范就必须实现HEAD方法

 

【原创】安全问题解决——启用了不安全的HTTP方法


6) OPTIONS方法OPTIONS方法请求Web服务器告知其支持的各种功能可以询问服务器通常支持哪些方法或者对某些特殊资源支持哪些方法有些服务器可能只支持对一些特殊类型的对象使用特定的操作)。这对客户端应用程序提供了一种手段使其不用实际访问那些资源就能判定访问各种资源的最优方式

 

 

7) TRACE方法:客户端发起一个请求时,这个请求可能要穿过防火墙,代理,网关或其他一些应用程序每个中间节点都可能会修改原始的HTTP请求TRACE方法允许客户端在最终将请求发送给服务器时看看他变成了什么样TRACE请求会在目的服务器端发起一个环回诊断行程最后一站的服务器会弹回一条TRACE响应并在响应主体中携带它收到的原始请求报文这样客户端就可以查看在所有中间HTTP应用程序组成的请求/响应链,原始报文是否以及如何被毁坏或修改过

 

 

8) CONNECT方法:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器

 

1.3 HTTP方法安全性解析

(2) POST方法:主要是向指定的URLURI)提交数据, 通常用于表单发送,所传递的数据或参数不是已明文形式存在的,而是封装后的,因此相对安全系数高,像注册、登录、提交表单都是用该方法实现的。  

(3) PUT方法:本身不带验证机制,利用PUT方法可以快捷简单地入侵服务器,上传webshell等其他恶意文件,从而获取敏感数据或服务器权限。

(4) DELETE方法:利用该方法可以删除服务器上特定的资源文件,造成恶意攻击,安全系数极低。

(5) HEAD方法HEADGET本质是一样的,故安全系数不高。

(6) OPTIONS方法:用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。OPTIONS方法可能会暴露一些敏感信息,这些信息将帮助攻击者准备更进一步的攻击。安全系数较低。

TRACE方法:回显服务器收到的请求,为攻击者提供信息,安全系数较低。

(7) CONNECT方法:安全系数较高。

 

根据上述分析,除了GETPOST这两种常用的HTTP请求方式,为避免PUTOPTIONDELETEHEAD等请求方式web服务器进行恶意上传、修改、删除等操作,如不需要建议直接屏蔽。

 

2HTTP请求方式检查

排查服务器是否有使用不安全的HTTP方法,主要有以下2种简单方案。

方案一:安全扫描工具扫描。

一般的安全测试扫描工具均具有检测HTTP方法的功能。

方案二:手动排查

通过手动发送请求,检查响应头部中给的allow”字段,查看选项,可以判断支持的HTTP方法。响应头,如图所示:

HTTP/1.1 200 OK 

Server: Apache-Coyote/1.1 

Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS 

Content-Length: 0 

Date: Mon, 25 Jul 2018 10:12:23 GMT 

 

3、问题解决

修改WEB应用的web.xml部署文件插入限制请求方法的代码:

        <security-constraint>

            <web-resource-collection>

                <web-resource-name>fortune</web-resource-name>

                <url-pattern>/*</url-pattern>

                <http-method>PUT</http-method>

                <http-method>DELETE</http-method>

                <http-method>HEAD</http-method>

                <http-method>OPTIONS</http-method>

                <http-method>TRACE</http-method>

            </web-resource-collection>

            <auth-constraint></auth-constraint>

        </security-constraint>

标签解释:

<security-constraint>用于限制对资源的访问;

<auth-constraint>用于限制那些角色可以访问资源,这里设置为空就是禁止所有角色用户访问;

<url-pattern>指定需要验证的资源

<http-method>指定那些方法需要验证

 

解决方案验证

重启服务后再次请求服务,校验响应头,此问题不再存在。响应头,如图所示:

HTTP/1.1 200 OK 

Server: Apache-Coyote/1.1 

Allow: GET, POST 

Content-Length: 0 

Date: Mon, 25 Jul 2018 12:12:23 GMT 


以上是关于原创安全问题解决——启用了不安全的HTTP方法的主要内容,如果未能解决你的问题,请参考以下文章

web服务器启用了不安全的HTTP方法

web服务器启用了不安全的HTTP方法

火狐浏览器阻止了不安全的插件该怎么办?咋取消这插件

错误“只有在启用了不安全代码的情况下,Xamarin VSO中才会出现”使用/ unsafe进行编译时出现不安全代码“?

使用curl测试不安全的HTTP请求

如何在java中的应用程序中禁用不安全的HTTP方法