HTTP Strict Transport Security 告诉支持的浏览器,在一个缓存周期内对该主机强制使用 HTTPS。这种持久性既是特性也是风险:移除响应头并不会立刻抹掉客户端已存储的策略。

先验证 HTTPS 路径

在发送 HSTS 之前,确认规范主机名提供有效证书,并且 HTTP 在不依赖用户输入的情况下重定向到预期的 HTTPS URL:

curl -sS -D - -o /dev/null --max-redirs 0 http://www.example.test/
curl -sS -D - -o /dev/null https://www.example.test/

检查有代表性的深层路由与错误页。HSTS 无法修复证书错误,因为浏览器在接受该策略之前要求有效的 HTTPS 连接。

从一个短的 max-age 开始

分阶段发布能在配置还新的时候限制恢复窗口:

Strict-Transport-Security: max-age=300

观察站点与续期路径之后,再有意识地提高时长。记录日期、所选值与回滚条件。最终策略可能用一年,但这个数字是一种承诺,而不是扫描器分数。

把 includeSubDomains 当作独立的决定

includeSubDomains 把策略扩展到每个子域名。先盘点名称,包括旧服务、委派区,以及只在内部网络使用的主机名。即使只有一个仅 HTTP 的后代,也足以让该选项对收到父级策略的客户端产生破坏。

预加载不是普通的响应头配置

浏览器预加载程序可以在正常响应周期之外分发策略,其要求与移除延迟比设置一个响应头更严格。不要仅仅因为扫描器推荐就申请预加载;请先确认对域名及所有被覆盖名称的长期所有权。

验证公共响应

curl -sS -D - -o /dev/null https://www.example.test/ \
  | awk 'tolower($1) == "strict-transport-security:" { print }'

测试规范的公共边缘,而不只是某个源站端口。代理可能添加、移除或重复该响应头。

来源