我想知道在通过 HTTPS 和 HTTP 提供服务的站点上启用 HSTS 是否有意义。
我不完全确定 HSTS,但我认为是的。
(这个想法本身是合理的。它类似于“机会加密”的想法:通过对至少某些连接使用至少一定数量的加密来使攻击者更加努力。)
RFC 的摘要是这样说的:
该规范定义了一种机制,使网站能够声明自己只能通过安全连接访问和/或让用户能够指导他们的用户代理仅通过安全连接与给定站点进行交互。
句子的“和/或”位在这里似乎很重要。
所以你可以通过 HSTS 做的就是声明如下内容:这个站点一直是 HTTPS。即使您的防火墙阻止了与端口 80的所有连接,此站点也可以为您工作。事后考虑:如果这里有一个普通的 HTTP 链接,那么这是一个错误,请悄悄地将其升级到 HTTPS。
而这个静默升级异或失败位将使您免于他们在此处给出的场景:(第 2.3.1.3 节)
即使网站的开发人员仔细检查他们的登录页面是否存在“混合内容”,整个网站任何地方的单个不安全嵌入也会危及他们登录页面的安全性,因为攻击者可以通过注入代码(例如, 一个脚本) 到另一个加载不安全的站点页面。
虽然服务器应该将客户端重定向到 HTTPS(第 7.2 节):
如果 HSTS 主机通过非安全传输接收到 HTTP 请求消息,它应该发送包含指示永久重定向的状态代码的 HTTP 响应消息,
...这是应该的,而不是必须的。
因此,总而言之:是的,您要问的应该是 HSTS 的可能和合法使用。
另一件事:如果您希望支持可能同时使用站点的 HTTPS 版本(例如在家中)和站点的普通 HTTP 版本(例如从他们的办公室 WIFI)的笔记本电脑用户,那么您将必须设置 HSTS 超时足够低。(也许几分钟。)