在阅读HSTS(Strict-Transport-Security)的规范时,我在section 7.2中看到禁止在通过http而不是https访问时发送标头的禁令:
HSTS主机不得在HTTP响应中包含STS头字段 通过非安全运输传达。
这是为什么?如果违反了这些风险会有什么风险?
答案 0 :(得分:1)
危险在于网站本身的可用性。如果网站能够(通过现在或将来)通过HTTP而不是通过HTTPS做出响应,它将半永久性地阻止浏览器访问该网站:
仅通过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攻击者可能会添加如上所述。