写在前面的话

HTTP/1.1自1991年至2014年,已经走过了一段很长的发展历程:

  • HTTP/0.9– 1991
  • HTTP/1.0– 1996
  • HTTP/1.1
  • RFC 2068– 1997
  • RFC 2616- 1999
  • RFC 7230- 2014

这也就意味着,互联网中各种各样的服务器和客户端,可能会存在很多安全问题,这也会给HTTP走私攻击(HTTP数据接收不同步攻击)创造了机会。

\

遵循最新的RFC建议似乎很简单。然而,对于已经存在一段时间的大型系统,它可能会带来很多在系统可用性方面令人无法接受的影响。

http_desync_guardian这个工具库便应运而生,该工具可以帮助广大研究人员分析HTTP请求,以防止HTTP走私攻击(HTTP数据接收不同步攻击)的发生,同时还能够兼顾安全性和可用性。该工具可以将请求进行分类,并并提供针对每一层的处理建议。

该工具既可以分析原始的HTTP请求Header,也可以对那些已经被HTTP引擎分析过的请求数据进行二次分析。

工具特性

1、服务的统一性是关键。这意味着请求分类、日志记录和度量必须在后台进行,并使用最少的可用设置(例如,日志文件目的地址)。

2、关注可审查性。测试套件不需要关于库/编程语言的知识,而只需要关于HTTP协议的知识即可。因此,它很容易审查、贡献代码和重复使用。

3、安全性对于用户来说是最重要的。

4、轻量级,开销非常小,并且处理请求不需要额外开销。

支持的HTTP版本

该工具主要针对的是HTTP/1.1,具体可以参考提供的覆盖测试用例。

HTTP/1.1的前身不支持连接重用,这限制了HTTP去同步的机会,但是一些代理可能会将此类请求升级到HTTP/1.1,并重新使用后端连接,这可能会导致恶意HTTP/1.0请求。这也就是为什么我们选择使用与HTTP/1.1相同的标准来分析它们。对于其他协议版本,可以参考这篇【文档】。

工具下载

广大研究人员可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/aws/http-desync-guardian.git
复制代码

C代码使用

这个工具库主要使用的是C/C++开发的HTTP引擎,工具安装配置方法如下:

1、安装cbindgen:

cargo install --force cbindgen
复制代码

2、生成Header文件:

C:

cbindgen --output http_desync_guardian.h --lang c
复制代码

C++:

cbindgen --output http_desync_guardian.h --lang c++
复制代码

3、运行下列命令,其中相关代码位于“
./target/release/libhttp_desync_guardian.*”文件:

cargo build --release
复制代码
#include "http_desync_guardian.h"

/*

 * http_engine_request_t - already parsed by the HTTP engine

 */

static int check_request(http_engine_request_t *req) {

    http_desync_guardian_request_t guardian_request = construct_http_desync_guardian_from(req);

    http_desync_guardian_verdict_t verdict = {0};

    http_desync_guardian_analyze_request(&guardian_request, &verdict);

    switch (verdict.tier) {

        case REQUEST_SAFETY_TIER_COMPLIANT:

            // The request is good. green light

            break;

        case REQUEST_SAFETY_TIER_ACCEPTABLE:

            // Reject, if mode == STRICTEST

            // Otherwise, OK

            break;

        case REQUEST_SAFETY_TIER_AMBIGUOUS:

            // The request is ambiguous.

            // Reject, if mode == STRICTEST

            // Otherwise send it, but don't reuse both FE/BE connections.

            break;

        case REQUEST_SAFETY_TIER_SEVERE:

            // Send 400 and close the FE connection.

            break;

        default:

            // unreachable code

            abort();

    }

}
复制代码

许可证协议

本项目的开发与发布遵循Apache-2.0开源许可证协议。

分析HTTP请求以降低HTTP走私攻击HTTP数据接收不同步攻击的风险的更多相关文章

  1. 从session实现机制分析模拟请求验证码的可行性(转)

    悲剧了,发现写完这篇blog没有配上这个格调超高的标题.   1.0问题背景 现在要实现一个带验证码网站的的自动登陆功能.验证码识别过程不再这篇文章的讨论之中.(之后有篇文章我会详细的总结验证码的识别 ...

  2. 分析 ajax 请求并抓取今日头条街拍美图

    首先分析街拍图集的网页请求头部: 在 preview 选项卡我们可以找到 json 文件,分析 data 选项,找到我们要找到的图集地址 article_url: 选中其中一张图片,分析 json 请 ...

  3. springMVC源码分析--DispatcherServlet请求获取及处理

    在之前的博客springMVC源码分析--容器初始化(二)DispatcherServlet中我们介绍过DispatcherServlet,是在容器初始化过程中出现的,我们之前也说过Dispatche ...

  4. python爬虫之分析Ajax请求抓取抓取今日头条街拍美图(七)

    python爬虫之分析Ajax请求抓取抓取今日头条街拍美图 一.分析网站 1.进入浏览器,搜索今日头条,在搜索栏搜索街拍,然后选择图集这一栏. 2.按F12打开开发者工具,刷新网页,这时网页回弹到综合 ...

  5. 分析Ajax请求并抓取今日头条街拍美图

    项目说明 本项目以今日头条为例,通过分析Ajax请求来抓取网页数据. 有些网页请求得到的HTML代码里面并没有我们在浏览器中看到的内容.这是因为这些信息是通过Ajax加载并且通过JavaScript渲 ...

  6. python学习(26)分析ajax请求抓取今日头条cosplay小姐姐图片

    分析ajax请求格式,模拟发送http请求,从而获取网页代码,进而分析取出需要的数据和图片.这里分析ajax请求,获取cosplay美女图片. 登陆今日头条,点击搜索,输入cosplay 下面查看浏览 ...

  7. 爬虫(八):分析Ajax请求抓取今日头条街拍美图

    (1):分析网页 分析ajax的请求网址,和需要的参数.通过不断向下拉动滚动条,发现请求的参数中offset一直在变化,所以每次请求通过offset来控制新的ajax请求. (2)上代码 a.通过aj ...

  8. Fidller抓包分析post请求

    目的:抓包是为了最近做接口测试做准备,以前没有用过这个工具,最近来学下,但是网上很多文章了,所以不一一记录,有一部分参考即可 1.如何抓取想要的web端或者手机端包,已经有很多文章谢了,推荐的参考文章 ...

  9. 分析ajax请求过程以及请求方法

    ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式.据小编翻墙了解到,ajax很早 ...

随机推荐

  1. rootckeck

    rootcheck rootcheck1.问题描述2.analysis3.solution4.总结 1.问题描述 经常会有听说root手机,其实质就是让使用手机的人获得手机系统的最大权限.因为andr ...

  2. Docker入门篇(一)安装docker

    Docker入门篇(一)安装docker Docker的来源 由dotCloud公司首创及正式命名,但是企业规模小,影响力不够,所以在快要坚持不住的时候,开始吃百家饭--开源了.不开则已,一开惊人.越 ...

  3. 第56篇-ProfileData与DataLayout

    某些指令需要创建某些实例,如下: 指令 对应的DataLayout._struct._tag值 _checkcast._instanceof._aastore receiver_type_data_t ...

  4. 【测试数据】android下CPU核与线程数的关系

    测试方法 24MB的一张4K图片,连续计算5次直方图. 小米mix2s, 高通骁龙 845.4大核,4小核. 数据表格 线程数 绝对时间(s) 累计CPU时间(s) 每线程平均耗时(us) 每线程最大 ...

  5. 搭建服务器之www-向外提供视频服务by html5 video标签

    搭建好www服务器,主要目的有两个一个是试验下,另一个是想给女朋友个惊喜,给她个带视频的网页,嘿嘿当前测试下相应功能. 1,采用html5的视频功能:bideo标签. 源码如下: <!docty ...

  6. java接口概述及特点

    1 package face_09; 2 3 4 5 6 abstract class AbsDemo{ 7 abstract void show1(); 8 abstract void show2( ...

  7. Java多线程专题1: 并发与并行的基础概念

    合集目录 Java多线程专题1: 并发与并行的基础概念 什么是多线程并发和并行? 并发: Concurrency 特指单核可以处理多任务, 这种机制主要实现于操作系统层面, 用于充分利用单CPU的性能 ...

  8. linux虚拟化

    虚拟化硬件虚拟化:一台物理机虚拟出多台逻辑上的计算机cpu,内存可分配给多个虚拟机 虚拟机中 guestos 的配置有什么用 内存越大越好,CPU也不要太差,如果要用64位虚拟系统或者是Hyper-V ...

  9. 深坑react 引入antd无效问题

    //安装babel-plugin-import 第一步:npm install babel-plugin-import --save第二步:暴露webpack.config.js运行:npm run ...

  10. idea2020.1版本的maven项目报包不存在,找不到包错误

    错误描述 idea创建maven项目,导入依赖都是成功,但是运行就会报找不到对应jar包的错误 解决办法: File -> Settings -> 搜索maven -> 展开mave ...