HTTP/2 协议笔记
HPACK 压缩与安全攻击原理
C
S
多路复用
头部压缩
流控机制
点击翻页开始阅读 ↓
一、HTTP/2 基础
重点!
现代Web
基础协议
多路复用
单一连接上并行传输多个请求/响应
头部压缩
HPACK算法减少头部传输大小
流控机制
接收方控制发送方数据窗口
HPACK 压缩核心
客户端与服务器共同维护一个
动态表
,存储已发送的头部字段。 后续通信只需用
1字节索引
引用即可, 服务器解码时将索引展开为完整头部内容。
客户端
完整头部
动态表
存储头部
索引引用
1字节索引
服务器
1
二、HPACK 头部压缩
动态表工作原理演示
动态表 (Dynamic Table)
62
:method: GET
~30B
63
:authority: example.com
~25B
传输数据流:
发送完整头部
发送索引引用
重置
核心机制
动态表就像一本
共享字典
。第一次发送需要传输完整内容, 后续只需发送
索引号
(如 0xBE),服务器即可展开为完整头部。
1字节索引 ↔ 4KB数据
,压缩效率极高!
2
三、内存放大攻击
1
插入大头部
→
2
发送千个索引
→
3
内存暴涨
攻击效果演示
0 MB
网络流量
0 KB
服务器内存
0 MB
放大比率
0:1
放大比率: 0:1
模拟攻击
重置
攻击核心
几KB网络流量 → 几MB服务器内存。实测放大比率高达
1357:1
!
3
四、流控锁定机制
WINDOW_UPDATE 流控锁定
客户端 (攻击者)
初始窗口大小
0
数据流已锁定
WINDOW_UPDATE = 0
服务器 (受害者)
内存分配
0 MB
内存已锁定!
服务器无法发送响应,已分配内存永远不会释放
模拟流控锁定
重置
致命组合
内存放大攻击 + 窗口大小设为
0
=
内存永久锁定
,造成严重资源耗尽!
4