是否了解HTTP请求走私的POST分段方式?
1 个回答
天越来越黑,星星会越来越亮。随风起舞# 作用 HTTP 请求走私(HTTP Request Smuggling)主要利用前端代理、负载均衡器与后端服务器对 HTTP 请求边界解析不一致的问题,让攻击者把“下一个请求”的部分内容偷偷拼接到当前请求中。 常见危害包括: - 绕过前端安全控制或访问控制 - 绕过客户端认证 - 窃取或拼接其他用户的请求 - 利用反射型 XSS - 构造开放重定向 - 进行 Web 缓存投毒或缓存欺骗 # 原理 HTTP/1.1 中通常通过两个头判断请求体长度: - `Content-Length`:表示请求体字节长度,常见于普通 POST 请求 - `Transfer-Encoding: chunked`:表示使用分块传输,请求体由多个分段组成,并以 `0\r\n\r\n` 结束 如果链路上的不同组件对这两个头的优先级或解析结果不同,就可能产生请求走私。常见类型包括: - **CL.TE**:前端使用 `Content-Length`,后端使用 `Transfer-Encoding` - **TE.CL**:前端使用 `Transfer-Encoding`,后端使用 `Content-Length` - **TE.TE**:两端都声称支持 `Transfer-Encoding`,但其中一端可通过混淆该头被绕过 POST 的 chunked 分段请求大致如下: ```http POST / HTTP/1.1 Host: example.com Transfer-Encoding: chunked 5 hello 6 world 0 ``` 其中: - 每个分段前先写十六进制长度 - 随后是 `\r\n` 和对应长度的数据 - 最后以长度为 `0` 的分段结束 攻击者可构造同时带有 `Content-Length` 和 `Transfer-Encoding`、或对 `Transfer-Encoding` 进行混淆的 POST 请求,使前后端对“请求体在哪里结束”产生分歧,从而让剩余字节被后端解释成下一个请求的请求行或请求头。发布于 2026-10-27 05:35 •IP属地 湖北举报评论收藏
公众号进入网站体验更佳

