2

在阅读 HSTS (Strict-Transport-Security) 的规范时,我在第 7.2 节中看到禁止通过 http 而不是 https 访问时发送标头的禁令:

HSTS 主机不得在通过非安全传输传送的 HTTP 响应中包含 STS 头字段。

为什么是这样?如果违反,会有什么风险?

4

2 回答 2

1

危险在于网站本身的可用性。如果网站能够通过 HTTP 但不能通过 HTTPS 响应(现在或将来),它将半永久地阻止浏览器访问该网站:

  1. 浏览器:“我想要http://example.com
  2. ExampleCom:“您现在和接下来的 3 个月都应该访问 https:// URL!”
  3. 浏览器:“我想要https://example.com
  4. ExampleCom:[无]

通过仅通过 HTTPS 连接提供 STS 标头,该站点保证至少现在它不会将浏览器指向无法访问的站点。当然,如果 max-age 设置为 3 个月,明天 HTTPS 站点中断,效果是一样的。这只是一种增量保护。

如果您的服务器无法从请求特征中明确判断它是通过 HTTP 还是 HTTPS 访问,您认为您已将您的网站设置为无论如何只能通过 HTTPS 访问(例如,由于 nginx 代理中的 SSL/TLS 终止),始终提供标头应该是安全的。但是,如果您想同时提供这两种服务,例如,如果您希望从您的服务器提供 HTTP->HTTPS 重定向,请找出您的代理如何告诉您有关连接的信息并开始对 STS 标头响应进行门控。

(感谢Deirdre Connolly的解释!)

于 2016-09-26T21:16:17.483 回答
1

不确定您是否有要解决的特定问题,或者只是出于好奇,但最好在http://security.stackexchange.com上询问

像你一样,我看不到服务器通过 HTTP 发送的威胁。这真的没有意义,但我不确定说实话是否有风险。除了说如果您无法正确设置标头,那么您可能还没有准备好实施 HSTS,因为如果配置错误可能会很危险!

更大的危险是如果浏览器要处理通过 HTTP 接收的 HSTS 标头,第 8.1 节明确指出它必须忽略:

如果通过不安全的传输接收到 HTTP 响应,UA 必须忽略任何存在的 STS 头字段。

这里的风险是,如果浏览器错误地处理了仅 HTTP 的网站(或混合站点的仅 HTTP 部分),恶意攻击者(或意外配置错误的标头)可能会使该网站脱机。这将有效地导致该用户的 DoS,直到标头到期或站点实施 HTTPS。

此外,如果浏览器确实通过 HTTP 而不是 HTTPS 接受此标头,则 MITM 攻击者可能通过将其设置为 max-age 0 来使标头过期。例如,如果您在https 上设置了长 HSTS 标头: //www.example.com但攻击者能够通过http://example.com发布带有 includeSubDomain 的 max-age=0 标头,并且浏览器错误地处理了它,然后它可以有效地删除 HTTPS 为您的 www 提供的保护地点。

由于这些原因,客户端(即网络浏览器)正确实现这一点非常重要,如果通过 HTTP 服务并仅通过 HTTPS 处理它,则忽略 HSTS 标头。这可能是 RFC 声明服务器不得通过 HTTP 发送此信息的另一个原因 - 以防浏览器实现此错误,但老实说,如果发生这种情况,那么该浏览器会将所有仅 HTTP 的网站置于风险之中,因为 MITM 攻击者可能会添加它按照上面。

于 2016-09-27T01:58:45.373 回答