欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

HTTP/2 协议安全:HPACK 动态表与请求走私(Request Smuggling)

发表于:|最后更新:|分类:Web安全|阅读:1704 次

HTTP/2 使用 HPACK 头部压缩,通过动态表在连接内复用头部字段。当 CDN/反向代理与后端服务器对 Content-Length 与 Transfer-Encoding 的解析不一致时,攻击者可构造请求走私载荷,绕过前端访问控制并污染其他用户的请求。

一、Nginx 严格拒绝歧义请求头

nginx
server {
    listen 443 ssl http2;

    # 拒绝同时携带 Content-Length 与 Transfer-Encoding 的请求
    if ($http_transfer_encoding ~* "chunked") {
        set $deny 1;
    }
    if ($http_content_length != "") {
        set $deny "${deny}1";
    }
    if ($deny = "11") {
        return 400;
    }

    # 强制 HTTP/2 到后端使用 HTTP/1.1 并规范化头部
    proxy_http_version 1.1;
    proxy_set_header Transfer-Encoding "";
}