全部指南
严重程度:高危安全响应头

详解 HTTP 严格传输安全(HSTS)

HTTP 严格传输安全(HSTS)是一个响应头,它告诉浏览器只通过 HTTPS 连接你的网站。一旦浏览器见过它,在策略有效期内就会拒绝对你域名的明文 HTTP 连接。

这是什么

HSTS 通过 Strict-Transport-Security 响应头传递,例如 max-age=31536000; includeSubDomains; preload。max-age 表示浏览器记住该规则的时长(以秒为单位)。

在首次 HTTPS 访问之后,浏览器会自动把之后的每个请求升级为 HTTPS——用户不会意外访问到不安全的版本,攻击者也无法把连接降级回 HTTP。

为什么重要

没有 HSTS,用户发出的第一个请求(输入 yourdomain.com)会走明文 HTTP,可能在你重定向到 HTTPS 之前就被拦截——这是经典的 SSL stripping 攻击。

过弱的 HSTS 策略会削弱防护:较短的 max-age 会缩短强制执行的时间窗口,而省略 includeSubDomains 会让每个子域名都暴露于降级风险。

如何修复

发送一个强健的响应头

使用较长的 max-age(一年),覆盖子域名,并加入 preload。

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
先确认各处都已启用 HTTPS

只有在每个子域名都提供有效 HTTPS 之后,再添加 includeSubDomains 和 preload——否则你可能会把用户挡在尚未就绪的子域名之外。

提交到 preload 列表

当你的响应头包含 'preload' 后,在 hstspreload.org 提交你的域名,这样浏览器即使在第一次访问时也会强制 HTTPS。

常见问题

我该用多大的 max-age?

至少 15552000(6 个月);31536000(1 年)是常见推荐值,也是 preload 列表所要求的。

HSTS 会把我挡在自己的网站之外吗?

只有当你之后需要通过 HTTP 提供服务,或某个子域名没有 HTTPS 时才会。在启用 includeSubDomains 或 preload 之前,请充分测试。

你的应用受影响了吗?

AppSafe 一次免费扫描,就能检查这个问题以及数十项其他问题。

免费扫描我的应用