在 Apache HTTPD 服务器上进行配置,网络上的许多文章都建议通过将所有 HTTP 请求(永久)重定向到 HTTPS 来强制执行 HTTPS 协议。
以下是我理解的当用户尝试访问支持 HTTP 和 HTTPS 的服务器时发生的情况:
因此,如果请求包含敏感数据,在步骤 1 和 2 之间,中间人可以在请求中恢复它,但未加密。
如果客户端使用 Web 浏览器,该浏览器会将 301 重定向保存在缓存中,下次客户端使用 HTTP 发送请求时,它将自动使用 HTTPS 发送请求。
但是,如果客户端经常清除缓存怎么办?或者使用不存储永久重定向的 Web 浏览器以外的其他用户代理?我们不会在这里失去 HTTPS 的好处吗?
一个具体的例子:一个 REST API,请求包含敏感数据。可以从任何 HTTP 客户端(在线、嵌入软件或网站、独立)调用此 API。
在这种情况下,是否最好在服务器级别禁用HTTP 支持以强制使用 HTTPS ?
编辑 2017-11-14:
sys0dm1n 在下面告诉了我有关 HSTS 的信息。但是这种机制提供的安全性完全取决于用户代理对规范的遵守情况。
编辑 2017-11-15:
我在收到第一个答案后编辑我的帖子,以明确我的担忧。
“禁用http完全有帮助吗? ”
不,我认为不会,原因如下:大概,您的客户端/浏览器在发送请求之前不知道运行 http 的站点是否存在。当然,它会收到类似 404 或类似的错误代码,但此时,原始请求已经通过网络发送,任何“中间人”很可能已经能够观察到该请求。
作为问题的一个简单说明,这里调用了一个伪造的 http-url,它是由 Postman 制作的,它被 Fiddler 捕获。如您所见,返回了502 错误,但原始请求仍包含敏感数据。
现在只是为了比较,如果我也这样做,但只需将 url 更改为https,我会在 Fiddler 中得到不同的结果:
这会尝试建立隧道,并且不会显示任何后期数据。
因此,总而言之,您最好的选择可能是启用 HSTS 并将您的站点放在HSTS 预加载列表中,这应该会阻止发送任何 HTTP 请求(至少对于大多数主要浏览器的最新版本)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句