HSTS

这个 HTTP 头部用于强制浏览器只通过 HTTPS 连接,是具有里程碑意义的安全策略配置。以下是对各部分的详细拆解:


核心作用

HSTS(HTTP Strict Transport Security)
通过将网站标记为「仅限 HTTPS」来阻止浏览器使用 HTTP 协议连接,可防御以下攻击:

  • SSL Stripping(SSL剥离攻击)
  • Cookie 劫持
  • 中间人攻击(MITM)
  • 协议降级攻击

参数解析

1. max-age=31536000

  • 数值含义:有效期 31536000 秒 = 365天
  • 生效逻辑
    ① 浏览器首次访问时:
    ⠀└ 接收并记录该策略 → 开启 HSTS 保护
    ② 后续有效期内的访问:
    ⠀└ 无论用户输入 HTTP/HTTPS → 强制转为 HTTPS
    ③ 生效期间:
    ⠀└ 忽略证书错误警告(若配置不当可能导致无法访问)

2. includeSubDomains

  • 作用范围
    覆盖当前主域名及其所有子域名
    (例如 example.com 包含 api.example.com, cdn.example.com 等)
  • 安全要求
    必须确保所有子域都支持 HTTPS,否则会导致子域不可访问

核心实现原理

浏览器内部维护的 HSTS 列表工作机制:

ServerBrowserUserServerBrowserUserloop[有效期内的请求]输入 http://example.com尝试通过 HTTP 访问响应 307 跳转 + HSTS 头记录 HSTS 规则到本地缓存自动转为 https://example.com任何访问请求始终强制走 HTTPS

配置建议

  1. 分阶段部署

    • 测试阶段 → max-age=300(5分钟)
    • 稳定后 → max-age=63072000(2年)
  2. 风险规避

    • 部署前确认所有子域 HTTPS 支持
    • 禁用 includeSubDomains 直到子域准备完成
    • 使用 HSTS 预加载必须满足全部严格标准
  3. 紧急救援(误配置时):

    # 快速撤销策略(将 max-age 设为0即刻失效)
    add_header Strict-Transport-Security "max-age=0; includeSubDomains";
    

安全增强技巧

  1. 预加载列表(Preload List)
    通过 hstspreload.org 提交申请,将域名硬编码到浏览器内核:

    Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
    
  2. Cookie 安全联动
    配合安全 Cookie 属性使用时防御级别更高:

    Set-Cookie: session=xxxx; Secure; HttpOnly; SameSite=Strict
    
  3. 结合 CSP
    与内容安全策略形成双层防护:

    Content-Security-Policy: upgrade-insecure-requests
    

特别注意:错误配置 HSTS 会导致业务陷入无法恢复的 HTTPS 强制依赖状态,部署前务必通过 curl -I 验证头部生效情况并保持完善的证书管理机制。

posted @   木燃不歇  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示