为什么 google.com 不在 HSTS 响应 header 上设置 includeSubDomains 指令?

why google.com not set includeSubDomains directive on HSTS response header?

为什么 google.com 不对 http 严格传输安全响应设置 includeSubDomains 指令 header?

google.com HSTS 响应 header 类似于:

Strict-Transport-Security:max-age=86400

为什么不

Strict-Transport-Security: max-age=86400; includeSubDomains

第二个在我这边应该更安全,对吧??

静态

使用Google Chrome,您可以转到chrome://net-internals/#hsts 并查询不同的域。输入 google.com 并单击“查询”将返回结果列表。

在该结果列表中,您可以看到 static_sts_include_subdomains 为真,dynamic_sts_include_subdomains 为假。这比动态设置要好,动态设置容易受到攻击,即浏览器第一次请求带有 http://(而不是 https://)的域时,对手会拦截通信。为了克服这个弱点,我们有静态模式,它允许将 HSTS 记录直接硬编码到浏览器的源代码中。

希望对您有所帮助

是的,使用 includeSubDomains 更安全。

例如,攻击者可以设置和使用子域(例如 hacked.google.com)并通过 HTTP 访问它,并使用它来访问或覆盖在顶级域 (google.com) 设置的 cookie即使该顶级域使用 HSTS 进行保护。当然,如果您在 cookie 上使用 Secure 属性,那么这可能不是问题,但这只是为什么要使用 includeSubDomains.

的一个示例

您不能设置 includeSubDomains 属性,除非所有子域都在 HTTPS 上可用(很明显)。因此,如果 Google 有博客。google.com 并且仍未将其升级到 HTTPS,那么这可能解释了为什么他们不会在顶级域中使用 includeSubDomains

然而,正如@Horkine 正确指出的那样,Google 将他们的域预加载到 Chrome 浏览器代码中(并且该预加载列表也被其他浏览器获取)所以这个 HTTP header 不用于现代浏览器。

很奇怪,预加载版本和 HTTP HTTP Headers 版本之间存在一些不一致。老实说,这很奇怪。顺便说一句,这些差异也 breaks their own rules for preloading.

www.google.com

  • www.google.com的预加载版本具有includeSubDomains属性。
  • Strict-Transport-Security HTTP Header 版本 没有 includeSubDomains 属性但没有 preload 属性。

google.com

  • google.com的预加载版本确实具有includeSubDomains属性
  • 未发布 Strict-Transport-Security HTTP header。

为什么会出现这些不一致?我们只能猜测:

  • 可能是他们在完成对所有网站的升级后就没有时间更新他们的 HTTP Header?

  • 或者可能是因为某些应用程序会检测旧版浏览器(不包括预加载代码,但理解 HSTS header)并将旧版浏览器重定向到http://old.google.com 出于某种原因?

  • 或者它可能是区域特定的?

所有这些都是猜测,因为只有 Google 可以回答,我不知道他们在自己的网站上使用什么或为什么使用的任何文档。

但是,是的,要回答你最后一个问题,包含 includeSubDomains(如果可能的话)更安全,预加载更安全(尽管并非没有风险,除非你 100% 确信你是仅使用 HTTPS)。