#3695·seastar

HTTP 头、查询、尾部和分块扩展映射中的哈希泛滥风险

作者: K-ANOY创建于 2026年9月15日更新于 2026年9月15日
输入 容器和插入路径
请求头名称 _headersinclude/seastar/http/request.hh:68);Ragel 的 assign_field 调用 try_emplacesrc/http/request_parser.rl:70–78)。相同桶的不同名称会追加到现有值中。
解码查询名称 无论是 _query_params 还是已淘汰的 query_parametersrequest.hh:70,95–97)都由 request::add_query_paramsrc/http/request.cc:91–106)填充。每个接受的参数都会更新两个映射。
尾部名称 http_chunk_trailer_parser::_headerssrc/http/chunk_parsers.rl:225)在 176–185 处填充,然后移动到 request::trailing_headersinclude/seastar/http/internal/content_source.hh:219)中。
扩展名称 解析器首先将其插入到每个块的 _extensions 映射中(chunk_parsers.rl:55–56,94)。结果被合并到请求范围的 chunk_extensions 中,附加了重复名称的值(content_source.hh:146–149)。不同的扩展名称可以在多个块中累积。

std::hash<sstring> 代理到 std::hash<std::string_view>include/seastar/core/sstring.hh:803–807)。string_view_hash 使用相同的哈希器;头部映射的 case_insensitive_hash 会对哈希前的副本进行小写处理(include/seastar/util/string_utils.hh:44–68)。这些包装器不添加任何秘密种子。

内容来源: scylladb/seastar