HSTS (HTTP Strict Transport Security) 是指 Web 服务器向浏览器发出「今后的访问请全部使用 HTTPS」这一指示的安全机制。通过 Strict-Transport-Security HTTP 响应头设置,并在 RFC 6797 中标准化。
HSTS 解决的问题是从 HTTP 重定向到 HTTPS 时产生的中间人攻击 (MITM) 风险。用户访问 `http://example.com` 时,服务器会重定向到 `https://example.com`,但最初这次 HTTP 请求未加密,因此存在被攻击者截获的可能。在设置了 HSTS 的站点上,浏览器会自动把 HTTP 访问转换为 HTTPS,因此完全不会产生未加密的通信。
HSTS 响应头的设置示例是 `Strict-Transport-Security: max-age=31536000; includeSubDomains; preload`。max-age 是策略有效期,单位为秒,31536000 相当于 1 年;includeSubDomains 表示适用于子域名;preload 表示申请登记到浏览器的 HSTS 预加载列表。一旦列入预加载列表,即使用户一次也没访问过该站点,也会被强制使用 HTTPS。
引入 HSTS 时需要注意,如果在 HTTPS 配置存在问题的状态下启用 HSTS,就有导致站点无法访问的风险。安全的做法是先把 max-age 设短,例如 300 秒,测试确认无问题后再分阶段延长。