原创安全问题解决——启用了不安全的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的表单,将表单中填好的数据会被传输给服务器,然后由服务器对这些数据进行处理。
3) PUT方法:与GET从服务器读取资源相反,PUT方法会向服务器写入资源, 有些发布系统允许用户创建Web页面,并用PUT直接向其传输到Web服务器中。PUT方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,如果那个URL已经存在的话,就用这个资源来替代它。
4) DELETE方法: 用于删除请求URL上的某个资源,该请求返回状态有以下3种:
l 200:表示删除请求被成功执行,返回被删除的资源
l 202:表示删除请求被接受,但还没有被执行
l 204:表示删除请求被执行,但没有返回被删除的资源
5) HEAD方法:HEAD方法与GET方法的行为很类似,但服务器在响应中只返回首部。不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下对资源的首部进行检查。使用HEAD可以在不获取资源的情况下了解资源的情况(比如,判断其类型);通过查看响应中的状态码看看某个对象是否存在;通过查看首部测试资源是否被修改了。服务器开发者必须确保返回的首部与GET请求所返回的首部完全相同。遵循HTTP/1.1规范,就必须实现HEAD方法。
6) OPTIONS方法:OPTIONS方法请求Web服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法(有些服务器可能只支持对一些特殊类型的对象使用特定的操作)。这对客户端应用程序提供了一种手段,使其不用实际访问那些资源就能判定访问各种资源的最优方式。
7) TRACE方法:客户端发起一个请求时,这个请求可能要穿过防火墙,代理,网关或其他一些应用程序。每个中间节点都可能会修改原始的HTTP请求。TRACE方法允许客户端在最终将请求发送给服务器时,看看他变成了什么样。TRACE请求会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间HTTP应用程序组成的请求/响应链,,原始报文是否以及如何被毁坏或修改过。
8) CONNECT方法:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
1.3 各HTTP方法安全性解析
(2) POST方法:主要是向指定的URL(URI)提交数据, 通常用于表单发送,所传递的数据或参数不是已明文形式存在的,而是封装后的,因此相对安全系数高,像注册、登录、提交表单都是用该方法实现的。
(3) PUT方法:本身不带验证机制,利用PUT方法可以快捷简单地入侵服务器,上传webshell等其他恶意文件,从而获取敏感数据或服务器权限。
(4) DELETE方法:利用该方法可以删除服务器上特定的资源文件,造成恶意攻击,安全系数极低。
(5) HEAD方法:HEAD和GET本质是一样的,故安全系数不高。
(6) OPTIONS方法:用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。OPTIONS方法可能会暴露一些敏感信息,这些信息将帮助攻击者准备更进一步的攻击。安全系数较低。
TRACE方法:回显服务器收到的请求,为攻击者提供信息,安全系数较低。
(7) CONNECT方法:安全系数较高。
根据上述分析,除了GET和POST这两种常用的HTTP请求方式,为避免PUT、OPTION、DELETE、HEAD等请求方式对web服务器进行恶意上传、修改、删除等操作,如不需要,建议直接屏蔽。
2、HTTP请求方式检查
排查服务器是否有使用不安全的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方法的主要内容,如果未能解决你的问题,请参考以下文章
错误“只有在启用了不安全代码的情况下,Xamarin VSO中才会出现”使用/ unsafe进行编译时出现不安全代码“?