当我们拥有支持 HSTS 的浏览器时,为什么还要使用 HTTPS Everywhere?

信息安全 tls 网页浏览器 http 浏览器扩展 插件
2021-08-11 07:59:35

我知道浏览器访问任何网站的默认协议是http://什么时候https://明确没有提到,但即使我们浏览到一个网站说www.facebook.com,来自 Facebook 服务器的响应标头会提到HSTShttp:// ,我们的浏览器会引导我们https://为什么当浏览器本身为用户执行此操作时,我们是否需要另一个插件来执行此操作?当我们的浏览器默认工作时, HTTPS Everywhere的目的是什么。

4个回答

HSTS 使用首次使用信任模型。如果您与该站点的第一次连接已被破坏,您可能不会在后续请求中收到 HSTS 错误。

HTTPS Everywhere 通过让您的浏览器从第一次连接就知道该站点是仅 HTTPS 站点来填补这个漏洞。

此外,一些网站即使支持 HTTPS,也不会宣传 HSTS 标头。或者他们的 HTTPS 可能位于不同的域/路径中(例如http://www.example.combut https://secure.example.com),HTTPS Everywhere 试图通过重写站点的 URL 来帮助解决这些情况。

HTTPS Everywhere 是客户端,而 HSTS 是服务器端。

所以答案是HTTPS Everywhere是为了在服务器没有设置HSTS标头的情况下进行防御。

即使这样,如果我们浏览一个网站说www.facebook.com,来自 Facebook 服务器的响应标头也会提到 HSTS

我提出了一个curl请求http://www.facebook.com,这就是我得到的:

< HTTP/1.1 302 Found
< Location: https://www.facebook.com/
< Content-Type: text/html
< X-FB-Debug: zgK/A+8XSlghi/vWvAivsZ04gawpdr+3BuO7yuQaKDdrP/+B14oSVDSreHh0GbchyNPnav39pQq9Zgw5mSXX5A==
< Date: Sat, 29 Apr 2017 19:23:25 GMT
< Connection: keep-alive
< Content-Length: 0

如您所见,这里没有 HSTS 标头,因为根据其规范(RFC6797)

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

Web 浏览器也会忽略HTTP 响应中的HSTS 标头:

注意:当使用 HTTP 访问您的站点时,浏览器会忽略 Strict-Transport-Security 标头;这是因为攻击者可能会拦截 HTTP 连接并注入或删除标头。当您的站点通过 HTTPS 访问且没有证书错误时,浏览器就知道您的站点支持 HTTPS,并将遵守 Strict-Transport-Security 标头。

HSTS 的目的是告诉客户端在通过 HTTPS 访问网站后不要切换到 HTTP,而不是相反。来自维基百科

HTTP 严格传输安全 (HSTS) 是一种 Web 安全策略机制,有助于保护网站免受协议降级攻击和 cookie 劫持。

协议降级攻击

降级攻击是对计算机系统或通信协议的一种攻击形式,使其放弃高质量的操作模式(例如加密连接),转而采用旧的、低质量的操作模式(例如明文)是否存在与旧系统的向后兼容性。

因此,HSTS 标头不用于将新的 HTTP 连接重定向到 HTTPS,而是用于防止浏览器向现有的 HTTPS 站点发出 HTTP 请求。

另一方面,HTTPS Everywhere 插件可确保 Web 浏览器与支持 HTTPS 的网站建立 HTTPS 连接,但也可以通过 HTTP访问

Web 上的许多站点对通过 HTTPS 的加密提供了一些有限的支持,但使其难以使用。例如,他们可能默认使用未加密的 HTTP,或者使用返回未加密站点的链接填充加密页面。HTTPS Everywhere 扩展通过使用巧妙的技术将对这些站点的请求重写为 HTTPS 来解决这些问题。

HSTS 由网站运营商自行决定。他们必须决定强制 HTTPS 的安全优势是否值得额外的服务器负载、阻止无法使用 HTTPS 的用户以及使缓存代理无效。强制 HTTPS 是 HSTS 的先决条件。

许多站点可选地提供 HTTPS,但是否使用它通常不是由最终用户选择,而是由提供链接或 URL 的人选择。HTTPS Everywhere 允许用户在此类站点上使用 HTTPS,即使链接或键入的 URL 使用 HTTP。

随着越来越多的站点强制使用 HTTPS 并引入 HSTS 以降低纯文本重定向的安全风险,“HTTPS Everywhere”的需求将减少,但除非/除非所有提供 HTTPS 的站点都这样做,否则它仍然是一个有用的插件。