WAF 防护73 条

HSTS 与强制跳转

启用 HSTS 后浏览器强制使用 HTTPS,并可按策略包含子域;启用前确保全站 HTTPS 可用,否则用户可能被锁在不可访问状态。

安全设备配置速查安全更新于 2026-10-13

HSTS 做什么

HSTS 让浏览器在一段时间内强制使用 HTTPS 访问站点,阻止降级到明文 HTTP,也减少 Cookie 被明文劫持的机会。它通过响应头下发,由浏览器在本地执行约束,部署成本很低,但启用前必须确认全站 HTTPS 已经可用。

为什么回退很难

浏览器记住 HSTS 策略后,在有效期内即使站点证书出问题,用户也无法靠点「继续访问」绕过,只能等策略过期或被清除。includeSubDomains 会把约束扩展到所有子域,preload 会写进浏览器内置列表,这两项要先确认覆盖范围内的域名都支持 HTTPS。

基本信息

作用防降级攻击与 Cookie 明文劫持
主要参数max-age、includeSubDomains、preload
前提全站 HTTPS 且证书有效
回退代价策略有效期内无法绕过,证书故障会直接导致不可访问

典型使用场景

  • 站点已完成全站 HTTPS 改造,需要防止降级
  • 审计或检查要求启用严格传输安全
  • 登录类页面需要降低 Cookie 被劫持的风险
  • 统一多站点安全基线
  • 评估子域覆盖范围后再决定是否 includeSubDomains
  • 上线 preload 前的逐域名确认

响应头示例

响应头示例
# 先从小 max-age 起步,确认无问题后再逐步加长
add_header Strict-Transport-Security "max-age=300" always;
# 全站与子域都确认支持 HTTPS 后,再启用下面的形式
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

参数与含义

参数含义注意事项
max-age策略有效期(秒)设得过小作用有限,过大则回退困难
includeSubDomains策略覆盖全部子域存在未支持 HTTPS 的子域时不要启用
preload写入浏览器内置列表退出流程冗长,启用前逐域名确认
includeSubDomains 覆盖全部子域:存在未支持 HTTPS 的子域时,启用后这些子域会直接无法访问。
max-age 建议先从小值起步(如几分钟到几小时),确认站点与子域都正常后再逐步加长,避免一开始就把自己锁死。
启用 preload 前要确认所有相关域名都长期支持 HTTPS:一旦进入浏览器内置列表,退出周期以月计。

易错点

  • 先启用 preload 再发现某子域未支持 HTTPS,回退周期很长
  • max-age 设很小时 HSTS 作用有限,需要按现状权衡
  • 启用 includeSubDomains 前不核对子域,导致部分子域不可访问
  • 证书到期未处理时,HSTS 让用户连忽略提示的机会都没有
  • 只在部分站点启用,同一品牌下的域名策略不一致
  • 证书链不完整时开启 HSTS,用户端会在没有绕过选项的情况下直接报错

数据来源与参考

  • RFC 6797(HTTP 严格传输安全)
  • OWASP 安全响应头项目
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌