当浏览器不支持 HSTS 时,Web 应用程序如何保护用户?

信息安全 tls 中间人 hsts IE浏览器
2021-08-13 06:53:42

HTTP 严格传输安全(HSTS) 是一项非常有用的功能,可防止OWASP a9 违规SSLStrip等尝试阻止客户端建立安全连接的攻击。然而,这项技术不在旧版本的网络浏览器中(最显着的是 IE)。2015 年 6 月,Microsoft终于在 Windows 7、8.1 和 10 上为 IE 11 添加了对 HTTP 严格传输安全性的支持。Microsoft Edge 也支持它。这两个都将为 Chromium 预加载列表中的站点执行 HSTS 预加载。然而,并非所有用户都使用最新的网络浏览器。

那么如何保护不支持 HSTS 的浏览器的用户呢?尽管向不安全的客户端提供内容,但 Web 应用程序可以提供的“最佳”传输安全级别是多少?

(大声向 Tylerl 提出这个问题。)

4个回答

你不能。

您可以做的最好的事情是在站点范围内使用 SSL。让所有 HTTP 连接立即将用户重定向到 HTTPS(通过 HTTPShttp://www.example.com/anything.html重定向到首页,例如,应该重定向到https://www.example.com/)。不要通过 HTTP 提供任何内容(除了通过 HTTPS 立即重定向到您的首页)。secure在所有 cookie 上设置标志(显然)。

这不会阻止将用户降级为 HTTP 的中间人攻击。如果没有 HSTS,您将无法阻止这种攻击。

你不能做得比这更好。那好吧。IE就是这样。

另请参阅防御 SSLstrip 时的选项?.

显然,您无法阻止在流量到达您的服务器之前发生的攻击。在那一点上,您根本无法产生任何影响。

但是,为了防止非 SSL 流量被发送,您可以做的一件事是故意破坏非 SSL 链接。由于网站管理员通常会在链接上线之前至少对其进行一次测试,这将提示他们需要将协议更改为 https。

一个简单的方法是显示一个页面,警告用户他们通过不安全的链接到达并指示他们“更新他们的书签”等,然后提供一个 https 链接以继续他们想去的地方。它相当不具侵入性,不会过多地妨碍普通用户,但它为网页设计师提供了暗示,他们无论如何都是这类活动的目标。

您可能想给这个页面一个 404 状态代码,这样它就不会被解释为真实的内容。缺点是搜索引擎依靠 302 重定向来更新其索引以指向正确的页面。返回 404 将从索引中删除链接,而不是将其更新为 https。因此,您可能希望向机器人发送 302 并将浏览器发送到您的 404“更新您的链接”页面。

HSTS 是针对 SSLStrip 的唯一保护措施,但是您可以采取以下预防措施来帮助防止攻击:

  1. 确保您的 Web 应用程序没有混合内容漏洞这确实超出了 HSTS,因为它不能防止通过 HTTP 从其他域中提取 JavaScript。

  2. 安全问题的常见解决方案是教育向用户提供不显眼的消息,告知他们正在使用不安全的浏览器,并且应该考虑使用 Chrome 或 Firefox。

  3. 在 http cookie 上设置“安全”标志(但每个人都应该这样做,并且不会停止 SSLStrip)。

  4. 在每个页面上引入 JavaScript 以检测页面是否已通过 HTTP 加载(这应该是不可能的,因为 HSTS),并阻止用户使用您的 Web 应用程序。显示一个巨大的红色窗口,显示您受到攻击这可以通过有针对性的 MITM 攻击来消除,但如果攻击者只是盲目地使用 SSLStrip,则不能。

首先想到的是将服务器设置为仅接受相关页面上的 SSL 连接,不允许 HTTP 连接。这应该会阻止服务器将任何敏感信息以明文形式发送回用户,但最终不会阻止活动的 MITM,该 MITM 可以与用户建立不安全的连接,然后将其转换为从攻击者到服务器的 SSL 连接.

最终,我不确定是否还有更多可以做的事情,尽管因为没有一种机制来通知客户他们不应该明文发送东西,他们将接受他们被告知的任何内容。

这带来了另一点,我对 HSTS 了解不多,但似乎可以阻止主机和客户端之间直接通信的主动攻击者也可以简单地剥离 HSTS,因为 HTTPS 通常不与客户端证书一起使用. 用户一开始不会看到安全连接,但如果我们不相信用户知道什么应该或不应该是 HTTPS,那么实际上,对于我们可以添加的任何内容来说,这可能不会有太大的难度检查 HTTPS 是否也被剥离。

我想另一个想法是放置某种 JavaScript 调用来检查连接类型并显示警告,但同样,这可能会被主动攻击者剥夺。 https://stackoverflow.com/questions/414809/how-do-i-determine-whether-a-page-is-secure-via-javascript