【安全问题】启用了不安全的HTTP方法——深度分析及解决方案
前言
启用了不安全的HTTP方法是常见的安全报错。本文将对八种主要的HTTP方法进行原理及安全性分析,并提供简单的解决方案。
1、HTTP方法安全性分析
1.1 HTTP方法由来
HTTP协议提供了集中请求方式,每种请求方式都有不同的作用,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
1.2 HTTP方法详述
- GET方法:GET是最常用的方法,它的作用是获取服务器中的某个资源。如图所示,客户端用GET方法发起了一次HTTP请求,然后服务端将对应的资源返回给客户端。
- POST方法:POST请求通常会用来提交HTML的表单,将表单中填好的数据会被传输给服务器,然后由服务器对这些数据进行处理。
- PUT方法: 与GET从服务器读取资源相反,PUT方法会向服务器写入资源, 有些发布系统允许用户创建Web页面,并用PUT直接向其传输到Web服务器中。PUT方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,如果那个URL已经存在的话,就用这个资源来替代它。
- DELETE方法: 用于删除请求URL上的某个资源,该请求返回状态有以下3种:
200:表示删除请求被成功执行,返回被删除的资源
202:表示删除请求被接受,但还没有被执行
204:表示删除请求被执行,但没有返回被删除的资源 - HEAD方法:HEAD方法与GET方法的行为很类似,但服务器在响应中只返回首部。不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下对资源的首部进行检查。使用HEAD可以在不获取资源的情况下了解资源的情况(比如,判断其类型);通过查看响应中的状态码看看某个对象是否存在;通过查看首部测试资源是否被修改了。服务器开发者必须确保返回的首部与GET请求所返回的首部完全相同。遵循HTTP/1.1规范,就必须实现HEAD方法。[在这里插入图片描述](https://img-
- OPTIONS方法:OPTIONS方法请求Web服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法(有些服务器可能只支持对一些特殊类型的对象使用特定的操作)。这对客户端应用程序提供了一种手段,使其不用实际访问那些资源就能判定访问各种资源的最优方式。
- TRACE方法:客户端发起一个请求时,这个请求可能要穿过防火墙,代理,网关或其他一些应用程序。每个中间节点都可能会修改原始的HTTP请求。TRACE方法允许客户端在最终将请求发送给服务器时,看看他变成了什么样。TRACE请求会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间HTTP应用程序组成的请求/响应链,,原始报文是否以及如何被毁坏或修改过。
- CONNECT方法:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
1.3 HTTP方法安全性解析
(1) GET方法
主要用于向指定的URL(URI)请求资源(资源文件或是数据均可), 可以带参数也可以不带参数, 带参数时,参数是明文传递,你可以在浏览器的地址栏中看到参数名及参数值,get安全性不高,所以常用于安全性要求低的场合,比如登录后请求数据。
(2) POST方法
主要是向指定的URL(URI)提交数据, 通常用于表单发送,所传递的数据或参数不是已明文形式存在的,而是封装后的,因此相对安全系数高,像注册、登录、提交表单都是用该方法实现的。
(3) PUT方法
本身不带验证机制,利用PUT方法可以快捷简单地入侵服务器,上传webshell等其他恶意文件,从而获取敏感数据或服务器权限。
(4) DELETE方法
利用该方法可以删除服务器上特定的资源文件,造成恶意攻击,安全系数极低。
(5) HEAD方法
HEAD和GET本质是一样的,故安全系数不高。
(6) OPTIONS方法
用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。OPTIONS方法可能会暴露一些敏感信息,这些信息将帮助攻击者准备更进一步的攻击。安全系数较低。
(7) TRACE方法
回显服务器收到的请求,为攻击者提供信息,安全系数较低。
(8)CONNECT方法
安全系数较高。
综上所述,为避免对web服务器进行恶意上传、修改、删除等操作,除GET和POST这两种常用的HTTP请求方式外,应尽量屏蔽PUT、OPTION、DELETE、HEAD等请求方式。
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、不安全的HTTP解决方案
修改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方法——深度分析及解决方案相关推荐
- java wifi定位原理_基于wifi的室内定位方法深度分析.doc
大连理工大学本科毕业设计(论文) 基于WiFi信号的室内定位方法 Indoor localization method based on the WiFi signal 学 院(系): 软件学院 专 ...
- 启用了不安全的 HTTP 方法
IBM appscan安全漏洞扫描--启用了不安全的 HTTP 方法 appscan修订建议: 如果服务器不需要支持 WebDAV,请务必禁用它,或禁止不必要的 HTTP 方法(动词). <se ...
- poi 启用保护后取消_ie11启用增强保护模式开启关闭方法
ie11启用增强保护模式开启关闭方法 有网友和浏览器之家小编说到,一打开IE11就在那里报错,然后提示崩溃并再次恢复.导致软件无法正常使用是无法忍受的.其实这一切的始作俑者就是 IE11 里的&quo ...
- win10小娜_win10锁屏界面启用微软小娜功能的方法
win10锁屏界面启用微软小娜功能的方法,win10系统自带有小娜功能,但一些用户不知如何启用小娜,其实我们可通过 锁屏界面中启用,不知如何操作的用户,请来看看下面的介绍吧. win10系统小娜助手可 ...
- suricata mysql_Suricata启用Hyperscan支持以及Prelude-siem安装方法.md
# Suricata启用Hyperscan支持以及Prelude-siem安装方法 ## 0x01 安装 Hyperscan ### 1.Hyperscan 安装要求: * GCC 版本大于等于 4. ...
- 引导方法深度补全系列—晚期融合模型—1—《Dense depth posterior (ddp) from single image and sparse range》文章细读
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 创新点 实施细节 对比sparse_RGBD tips 方法详解 损失函数 优缺点 总结 创新点 1.提出了基于贝叶斯理论的两步 ...
- C#中判断空字符串的3种方法性能分析【月儿原创】
C#中判断空字符串的3种方法性能分析 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.4.28 3种方法分别是:string ...
- JS中toFixed()方法的问题及解决方案
JS中toFixed()方法的问题及解决方案 参考文章: (1)JS中toFixed()方法的问题及解决方案 (2)https://www.cnblogs.com/gushen/archive/201 ...
- 【已解决】关于SQL2008 “不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了‘阻止保存要求重新创建表的更改’” 解决方案
[已解决]关于SQL2008 "不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了'阻止保存要求重新创建表的更改'" 解决方案 参考文章 ...
最新文章
- 【Sql Server】DateBase-视图
- python解码函数_python2和python3的编码encode解码decode函数
- 【django】HttpRequest对象
- PHP 底层的运行机制与原理 --转
- Maven构建生命周期和各种plugin插件
- Android Ap 开发 设计模式第四篇:工厂方法模式
- 实用设置_华为手机4个冷门实用的设置,都知道的绝对是资深花粉
- Bailian2698 八皇后【回溯】
- nodejs使用supervisor插件调试效率
- cmd进入mysql界面的命令
- django连接mysql
- 平衡二叉树详解 通俗易懂
- 200724 EXCEL
- 计算机无法连接到wifi但手机可以使用,电脑连不上wifi而手机能连怎么办
- LaTeX复选框实现
- 近半数受访企业年度调薪比例在5%以下,约40%企业年度调薪率与上年度相比保持不变 | 美通社头条...
- GO使用go get -u “包“: fatal: unable to access ‘https://github.com/..‘: Failed to connect to报错
- export命令在Mac Pycharm上如何设置环境变量!_ CodingPark编程公园
- PIM协议原理与配置
- Linux ffmpeg 一键安装