为什么RFC 6797禁止在纯HTTP响应上发送Strict-Transport-Security头?

时间:2016-09-26 21:16:17

标签: security web specifications hsts

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

  

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

这是为什么?如果违反了这些风险会有什么风险?

2 个答案:

答案 0 :(得分:1)

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

  1. 浏览器:"我想要http://example.com"
  2. ExampleCom:"您应该立即转到https://网址,接下来的3个月!"
  3. 浏览器:"我想要https://example.com"
  4. ExampleCom:[没有]
  5. 仅通过HTTPS连接提供STS标头,该网站保证至少现在它不会将浏览器指向无法访问的网站。当然,如果max-age设置为3个月并且明天HTTPS站点中断,则效果是相同的。这只是一种增量保护。

    如果您的服务器无法肯定地告知请求特征是否通过HTTP和HTTPS访问,但是您认为您已将您的网站设置为只能通过HTTPS访问(例如,由于nginx代理中的SSL / TLS终止),它应该可以安全地始终为头提供服务。但是如果你想同时服务,例如如果您希望从服务器提供HTTP-> HTTPS重定向,请了解您的代理如何告诉您有关连接的信息并开始对其进行STS标头响应。

    (感谢Deirdre Connolly的解释!)

答案 1 :(得分:1)

不确定您是否有特定问题需要解决,或者仅仅是为了好奇,但最好在http://security.stackexchange.com

上询问

和我一样,我看不到服务器通过HTTP发送的威胁。它确实没有意义,但我不确定是否存在诚实的风险。除非说你不能正确设置标题,否则你可能还没准备好实施HSTS,因为如果配置错误可能会很危险!

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

  

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

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

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

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