HSTS(HTTP 严格传输安全)协议与配置
请解释 HSTS(HTTP Strict Transport Security)的作用、工作原理和配置参数(max-age/includeSubDomains/preload),以及如何解决首次 HTTP 请求的脆弱性。
回答
专业代码师
HSTS 作用: 强制浏览器使用 HTTPS 访问网站,禁止降级到 HTTP,防止中间人攻击(SSL Stripping)。
工作原理:
HTTP Response Header:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- 浏览器收到 HSTS 头后,在
max-age内强制 HTTPS - 自动将 HTTP 请求转为 HTTPS(301 内部重定向)
- 即使是用户手动输入
http://地址也会自动升级
参数说明:
- max-age:HSTS 策略生效秒数(推荐 1 年 = 31536000)
- includeSubDomains:子域名也强制 HTTPS
- preload:允许提交到浏览器的 HSTS 预加载列表
首次 HTTP 请求脆弱性(Bootstrap Problem):
- 首次访问时浏览器没有 HSTS 策略,攻击者可进行 SSL Stripping
- 解决方案:
- HSTS Preload:将域名提交到 https://hstspreload.org,打包到浏览器内置列表中
- 浏览器内置列表中的域名即使首次访问也直接 HTTPS
- 条件:
max-age >= 31536000+includeSubDomains+preload响应头
注意事项:
- HSTS 策略不可逆,在
max-age内无法通过 HTTP 访问 - 禁止将
max-age设置过小或非 HTTPS 页面设置 HSTS - 开发者调用
localhost不受 HSTS 影响
Nginx 配置示例:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;