丝网印刷风互联网网关精确区分有效安全指令与相似但无效的标记

curl 8.22.0 改变了 HSTS 解析器识别指令名的方式:已知名称现在必须完整匹配一个 token,而不能只匹配前缀。该版本于 2026 年 9 月 2 日发布,相关 curl 项目修复在 8 月下旬完成。

问题说明给出了两种具体影响:以 includeSubDomains 开头的相似名称可能被当作真实指令;以 max-age 开头的相似名称则可能干扰后续有效 max-age 指令的处理。修正后的解析器会把更长的相似名称视为未知指令,并继续按语法处理真正被识别的指令。

这对代理采集和验证系统很重要,因为 HSTS 决策发生在客户端。缓存策略可能在代理协商前就把 HTTP URL 升级成 HTTPS,从而改变目标协议、端口、CONNECT 行为、TLS 握手与连接池键,即使输入 URL 没有变化。

curl 8.22 改了什么

curl 发布说明将修复概括为 HSTS 精确字符串匹配。相关变更说明旧行为使用不区分大小写的前缀比较;新版本先提取完整指令名,再与已知名称进行完整比较。

因此解析结果更窄且更可预测:精确有效指令保持其定义;仅以有效名称开头的更长 token 被视为未知;相似名称不应启用子域策略,也不应阻止后续真正有效的指令被处理。

这是解析正确性修复,不代表可以降低 TLS 验证或忽略异常响应头。升级后仍需验证应用依赖的具体行为。

为什么代理工作流需要回归

HSTS 状态由 HTTP 客户端持有,不由代理出口 IP 决定。客户端将请求升级为 HTTPS 后,HTTP 代理可能收到 CONNECT,而不是普通 HTTP 请求;SOCKS 路径也可能承载不同目标端口。TLS 策略、证书验证和连接复用随后都会作用于升级后的目标。

受影响的合法场景包括地区可用性检查、需要保留协议与跳转轨迹的广告验证、跨工作进程复用 HSTS 缓存的网页采集、通过多条授权路由重放 URL 的市场研究,以及升级 libcurl 却未区分旧缓存状态的长期服务。

这并不意味着所有任务都应清空 HSTS,而是必须用受控回归将解析、缓存策略、代理路由和源站行为分开。

构建安全回归环境

使用组织自有的主机名、HTTPS 端点、证书与代理路由,不要向第三方服务发送构造的测试响应头。

准备四个隔离案例:

  1. 有效的 max-age 指令;
  2. 测试父域上的有效 includeSubDomains 指令;
  3. 名称仅以 includeSubDomains 开头的未知 token;
  4. max-age 开头的未知 token,后面再放一个有效 max-age

使用合成主机名和很短、确定的测试周期。保持证书和主机名验证启用,并记录客户端版本、HSTS 缓存身份、输入协议、实际协议、目标端口、代理模式、连接复用与最终结果。

升级流程可参考代理连接池年龄测试,TLS 配置隔离可参考代理 TLS 信任配置指南

升级后的预期结果

在 curl 8.22 或包含修复的供应商版本中:

  • 有效 max-age 案例按预期创建或更新策略;
  • 有效子域案例只在受控父域策略下生效;
  • 更长的子域相似名称被当作未知项,不启用子域策略;
  • 更长的 max-age 相似名称被忽略,后续精确 max-age 仍可处理;
  • HTTP 到 HTTPS 的升级在代理和 TLS 阶段之前可见;
  • HTTPS 证书和主机名验证保持启用。

每个案例先用全新缓存运行,再用同一缓存重复。无保存缓存的新进程作为对照。如果差异只在状态复用时出现,应先检查缓存来源与策略期限,而不是归因于代理路径。

观察完整请求路径

记录测试编号、curl/libcurl 版本、测试案例名称、HSTS 缓存的创建/加载/复用状态、输入和实际 URL 协议、目标主机与端口类别、HTTP 代理/CONNECT/SOCKS 路径、新建或复用连接、TLS 验证结果、跳转次数、最终响应验证,以及缓存更新或到期结果。

不得记录 Cookie、Token、代理密码、私钥、客户 URL 或完整浏览历史。测试环境不得包含生产身份和数据。

在不隐藏状态的前提下升级

确认服务进程实际加载的 libcurl,包括容器、静态程序、语言绑定和 sidecar。升级到 curl 8.22.0,或供应商明确记录包含该修复的版本。

滚动升级时按客户端版本区分测试 HSTS 缓存,以便比较新旧解析结果而不混合状态。按变更流程重启或排空工作进程,同时保留一个受控的升级前测试工件用于对照。不要把生产浏览状态复制到测试环境。

上线后监控异常协议升级、CONNECT 比例、TLS 失败、目标端口变化、HSTS 缓存写入和经过内容验证的成功率。健康部署应保留真实有效指令,并忽略更长的相似名称。

验收清单

  • [ ] 服务进程使用 curl/libcurl 8.22.0 或已记录修复的版本。
  • [ ] HSTS 缓存位置与所有者明确。
  • [ ] 精确指令和相似指令分别测试。
  • [ ] 子域相似名称不会启用子域策略。
  • [ ] max-age 相似名称不会阻断后续有效指令。
  • [ ] 输入与实际 URL 协议均有记录。
  • [ ] 代理模式和目标端口有记录。
  • [ ] TLS 证书与主机名验证保持启用。
  • [ ] 已比较新缓存与复用缓存结果。
  • [ ] 连接复用不会掩盖策略变化。
  • [ ] 日志不含凭据与生产浏览数据。

常见问题

代理会替 curl 解析 HSTS 吗?

不会。curl 的 HSTS 行为发生在客户端;得到的协议和连接变化随后才决定代理需要承载什么流量。

未知 HSTS 指令会让整个响应头失败吗?

本次修复确保更长的相似 token 走未知指令路径,同时继续处理被识别的指令。仍应测试应用实际依赖的客户端行为。

该修复能替代证书验证吗?

不能。HSTS 可以触发 HTTPS 升级,但客户端仍必须按信任策略验证证书链与主机名。

每次升级都必须清空 HSTS 缓存吗?

不一定。应保留预期策略,但测试状态需要版本化和受控,避免旧解析结果让回归结论含糊。生产缓存处理应遵循安全与变更流程。

来源与合规说明

内部研究依据:curl 项目于 2026 年 9 月 2 日发布的 curl 8.22.0 公告;curl 项目“hsts: match complete directive names”变更,于 8 月 23 日提出、8 月 26 日合并;HTTP 严格传输安全规范。外部资料 URL 仅保存在内部运营记录中,公开文章不含外部链接。

只对自己拥有或获准评估的域名、端点、证书与路由执行解析器和代理测试,并遵守隐私、服务商限制、服务条款和组织变更流程。