解释 HTTP 严格传输安全性
HTTP代表超文本传输协议。该协议用于 Web 请求中的通信。另一方面, HTTPS代表安全的超文本传输协议。虽然 HTTP 不关心加密在 HTTP 请求中传输的数据,并且通常容易受到中间人 (MiTM) 攻击。网络中的对手将能够窃听 HTTP 通信,从而降低其安全性。大多数现代网络通信都是通过加密有效负载的 HTTPS 方案进行的。
将 HTTP 重定向到 HTTPS 流量:考虑到明显的好处,大多数现代网站强制用户仅通过 HTTPS 协议与其通信。但是,客户端(用户浏览器)仍然可以在不使用 HTTPS 的情况下发出 HTTP 请求。理想情况下的 Web 服务器希望通知/重定向客户端在访问其域时使用 HTTPS 而不是 HTTP。实现这一目标的一种方法是:
- 客户端尝试访问站点的 HTTP 版本。例如,用户输入 http://geeksforgeeks.org。
- 然后服务器将这些请求重定向到更安全的 HTTPS 版本。在我们的例子中,从 http://geeksforgeeks.org 到 https://geeksforgeeks.org。
这种方法的问题:这听起来可能更安全,但在这种方法中,服务器首先接受 HTTP 连接并将其重定向到 HTTPS 替代方案。如您所见,无论其他请求到达何处,第一个 HTTP 请求本身都可能被窃听。由于这很容易被拦截,网络中的对手甚至可能篡改此重定向到恶意站点,而不是客户端尝试访问的原始站点的安全版本。
HSTS:HTTP Strict-Transport-Security:为了解决这个问题,可以使用 HSTS。 HSTS 代表 HTTP 严格传输安全。 HSTS 通知浏览器应仅通过 HTTPS 方案严格访问该站点,并且对服务器的任何后续调用都应自动转换为其在 HTTPS 上的安全替代方案。 Web 服务器通常通过响应标头指示此元数据信息。
语法:此响应头的语法是:
Strict-Transport-Security:max-age=[Time]
Web 服务器在此指示浏览器应该记住强制所有对服务器的 Web 请求仅通过 HTTPS 进行的决定的时间。在此响应标头中将信息设置为几年是很常见的。
可选参数:此标头支持一些可选参数/属性。它们是preload和includeSubDomains。
- includeSubDomains:如果在 Strict-Transport-Security 响应标头上启用此属性,则表明此 HSTS 策略也应应用于服务器的子域。例如,如果在 http://geeksforgeeks.org 上启用了 HSTS,并且 includeSubDomains 也设置如下,
Strict-Transport-Security:max-age=[Time]; includeSubDomains
然后浏览器会记住这适用于 geeksforgeeks.org 的所有子域。例如,如果用户代理尝试访问 http://auth.geeksforgeeks.org,尽管作为子域会遵守此策略并转移到更安全的 HTTPS。
- 预载:有; HSTS 预加载服务的预加载域列表。一旦您将您的域提交到此预加载服务列表,您的域将永远不会被浏览器的 HTTP 方案访问。这仍然不是官方规范的一部分,尽管一些浏览器遵循这一点。
浏览器兼容性:幸运的是,Web 和移动设备上的所有现代浏览器目前都支持 HSTS 标头并遵循这种方法。还预计预加载将成为未来的标准。