You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量检测网站HSTS支持情况及预加载列表相关技术问询

关于HSTS检测的常见疑问解答

我来帮你逐个拆解这些实际检测HSTS时会碰到的问题,都是一线场景里的高频疑问:

1. 仅检查Strict-Transport-Security响应头,能准确判断网站是否支持HSTS吗?存在未返回该头但在预加载列表的情况吗?

仅靠响应头检测并不完全准确,确实存在站点未返回该响应头但被包含在浏览器预加载列表中的情况:

  • 最常见的是主域名提交预加载时覆盖了子域名:比如主域名example.com提交预加载时配置了includeSubDomains,那么它的子域名blog.example.com即使自身不返回HSTS响应头,也会被浏览器强制应用HSTS策略。
  • 还有一种情况是站点曾经提交过预加载,后来移除了响应头,但预加载列表更新有延迟:预加载列表的更新周期通常是几周,这段时间内浏览器仍然会对该站点强制HTTPS,即使站点不再返回响应头。

所以如果只检查响应头,会漏掉这类被预加载列表覆盖的站点。

2. Chrome预加载列表订阅页面的「建议添加HSTS头」是否为强制要求?

这个建议不是强制要求,它只是Chrome给出的安全最佳实践引导:

  • 如果你只是想让站点自身启用HSTS,只要返回符合规范的Strict-Transport-Security响应头即可,不需要管这个建议。
  • 但如果你想要申请将站点加入Chrome的预加载列表,那么添加符合要求的HSTS响应头(比如包含max-age至少180天、includeSubDomains等参数)是必须的前置条件——这时候这个建议就成了申请预加载的硬性要求。

3. 若必须添加HSTS头,为何还要加入预加载列表?是否仅为保护首次连接?

没错,核心价值就是解决首次连接的安全风险:

  • HSTS响应头的作用是:用户第一次访问站点并收到该头后,浏览器会缓存这个策略,后续访问时直接强制使用HTTPS,避免HTTP降级攻击。但问题在于首次访问时,如果用户输入的是HTTP,或者被劫持到HTTP,浏览器还没缓存HSTS策略,这时候就可能被攻击。
  • 预加载列表是浏览器内置的本地列表,不管用户有没有访问过该站点,只要域名在列表里,浏览器会直接强制用HTTPS发起请求,从根源上解决了首次连接的安全漏洞。
  • 另外,预加载列表还能统一覆盖子域名(只要主域名提交时配置了includeSubDomains),而仅靠响应头的话,每个子域名都需要单独配置,成本更高。

4. 仅检查响应头是否足够,还是需核对Chrome预加载列表?若需核对,如何批量自动化检测?如何查询特定历史日期的预加载列表?

仅检查响应头不够全面,必须结合预加载列表才能得到准确结果。下面是批量检测和查询历史列表的方法:

批量自动化检测方案

  • 步骤1:批量检测响应头
    用脚本工具批量遍历站点列表,检查Strict-Transport-Security字段。比如用Python的requests库:

    import requests
    
    sites = ["https://example.com", "https://test.com"]
    for site in sites:
        try:
            response = requests.get(site, timeout=10)
            hsts_header = response.headers.get("Strict-Transport-Security")
            if hsts_header:
                print(f"{site}: 启用HSTS - {hsts_header}")
            else:
                print(f"{site}: 未返回HSTS响应头")
        except Exception as e:
            print(f"{site}: 请求失败 - {str(e)}")
    

    也可以用curl命令批量处理,结合shell脚本实现。

  • 步骤2:核对预加载列表
    Chrome的HSTS预加载列表是公开的JSON文件,你可以下载最新版本后,用脚本批量匹配域名:

    1. 下载最新的预加载列表(从Chromium官方仓库获取)
    2. 编写脚本解析JSON,将你的站点列表与预加载列表中的域名匹配——注意要处理子域名的情况:如果主域名在列表中且配置了includeSubDomains,那么它的所有子域名都属于被覆盖范围。

查询特定历史日期的预加载列表

预加载列表的历史版本可以通过Chromium的代码仓库获取:

  • 预加载列表的源码托管在chromium/hstspreload仓库中
  • 进入该仓库的commit历史,找到对应日期的提交记录,checkout到该commit版本,就能获取当时的预加载列表文件
  • 也可以直接在仓库的文件历史中,查看hstspreload/data/preloaded_domains.json文件的历史版本,下载对应日期的版本即可

内容的提问来源于stack exchange,提问作者qbq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:04:42