BBC 正在为其网站推出 HSTS,以提高安全性和性能。欢迎了解 HSTS 的意义以及它能为您提供哪些帮助。
HTTPS 的采用率近年来一直在稳步增长。根据 HTTP Archive 的 2021 年网络年鉴,在针对桌面设备和移动设备的所有请求中,大约 91% 是通过 HTTPS 传送的。HTTPS 并不仅仅是存在,而是使用 Service Worker 等功能和 HTTP/2 和 HTTP/3 等现代协议的必要前提条件。
最近,BBC 首席技术架构师 Neil Craig 在推文中提到,bbc.com 正逐步推出 HTTP 严格传输安全协议 (HSTS)。来看看这对 BBC 而言意味着什么,以及对您而言意味着什么。
问题
Web 服务器通常同时监听端口 80 和 443 上的请求。端口 80 用于不安全的 HTTP 请求,而端口 443 用于安全的 HTTPS。这可能会带来问题,因为当您在地址栏中输入不带 https://
协议前缀的地址时(就像大多数用户所做的那样),由于旧版原因,一些浏览器会将流量定向到网站的不安全 HTTP 版本(但并非始终如此)。
要确保用户不会访问网站的不安全版本,一种常用的方法是针对所有请求设置 HTTP 到 HTTPS 重定向。这当然有效,但会引发以下一系列事件:
- 服务器收到 HTTP 请求。
- 服务器发出重定向,以转到所请求资源的 HTTPS 等效资源。
- 服务器必须与浏览器协商安全连接。
- 内容会照常加载。
虽然重定向功能可以正常使用,但它们可能存在配置错误,导致仍然允许访问网站的不安全版本。即使所有设置都已正确配置,也仍存在安全问题,那就是用户在重定向阶段仍会通过不安全的 HTTP 进行连接,导致用户面临危险的中间人攻击。
输入 HSTS
HSTS 由 HTTPS 请求的 Strict-Transport-Security
HTTP 响应标头决定。设置后,对网站的回访将会触发称为“307 内部重定向”的特殊重定向,在这种情况下,由浏览器(而不是服务器)处理重定向逻辑。这可以防止请求被拦截,因为它永远不会离开浏览器,所以更加安全。另一个好处是,这些类型的重定向速度非常快,因此消除了从 HTTP 到 HTTPS 的跃点期间的任何明显延迟。
![从 HTTP 到 HTTPS 的 307 内部重定向,由 HSTS 标头触发。307 重定向只需要 2 毫秒。](https://web.developers.google.cn/static/blog/bbc-hsts/image/a-307-internal-redirect-cd7d384b0a833.png?authuser=5&hl=ro)
HSTS 标头指定 max-age
指令,其语法与 Cache-Control
的 max-age
指令的语法类似。该指令采用一个以秒为单位的值,用于指定政策的有效期:
Strict-Transport-Security: max-age=3600
在前面的示例中,此政策应该仅在一小时内生效。
部署 HSTS
部署 HSTS 的主要缺点是,如果您尚未准备好将源站视为严格安全,假设您有多个子网域正在提供资源,但并非所有子网域都是安全的。在这种情况下,HSTS 标头可能会破坏您的网站。
BBC 在部署 HSTS 时采用了正确的方法。正如 Neil Craig 在他的推文中提到的,为 bbc.com 设置的初始值为 max-age=10
。
这种方法意味着政策最初仅在 10 秒内有效。这并不会带来太大的好处,但我们的想法是了解应用 HSTS 是否有问题。随着时间的推移,您可以逐步增加此政策,看看是否会出现问题。在撰写本文时,bbc.com 正在将 HSTS 政策指定为 max-age=86400
,该政策几乎肯定会随着时间的推移而增加。
部署 HSTS 时,您肯定不希望看到长 max-age
值。您可能会发现,用户在解决问题时突然开始忙于解决。先小规模测试,然后逐步增加!如果您确信一切正常,就可以将 max-age
指令设置为更长的时间段。建议在全面推出后将 max-age
设置为一到两年。
利用 HSTS 预加载列表,获享更安全、更快速的初始导航
HSTS 政策仅在用户首次访问某个网站后才会生效,因此首次访问该网站时并不会享受到任何好处。不过,这仍然需要采用不安全的重定向。不过,您可以预加载自己的 HSTS 政策,只需将您的网站提交到 HSTS 预加载列表即可。HSTS 预加载列表是一个经过硬编码的列表,由浏览器确定为严格采用 HTTPS 的网站。如果您的网站位于预加载列表中,首次访问也会受到保护,并且从 HTTP 到 HTTPS 的重定向将即时完成。
亲自尝试一下
如果 BBC 愿意测试 HSTS,则您很可能也可以对自己的网站进行同样的测试。您可以测试一下您的网站,如果希望改进,当您确信没有错误,可以将其添加到 HSTS 预加载列表中,以便为用户带来更安全、更快速的体验。