并且通过 --this CSP 指令,可以让浏览器帮助做这个转换。启用此策略后,有两个变化:
与所有其他 CSP 规则一样,该指令可以通过两种方式启用配置burpsuit谷歌浏览器证书及HSTS问题处理,具体格式请参见上一节。需要注意的是——只是替换了协议部分,所以只适用于HTTP/HTTPS域名和路径完全一致的场景。
合理使用 HSTS
网站全HTTPS后,如果用户手动输入网站的HTTP地址,或从其他地方点击该网站的HTTP链接,则只能依靠301/302重定向来使用HTTPS服务服务器。第一个HTTP请求可能被劫持,导致请求无法到达服务器,从而构成HTTPS降级劫持。
HSTS 基本使用
这个问题可以通过 HSTS (HTTP,) 来解决。 HSTS 是一个响应头,格式如下:
--: max-age= [; ] [; ]
max-age,以秒为单位,用于告诉浏览器必须在规定时间内通过HTTPS协议访问该网站。即对于本网站的HTTP地址,浏览器在发送请求前需要在本地替换成HTTPS。
,可选参数。如果指定该参数,则表示本网站的所有子域也必须通过HTTPS协议访问。
,可选参数,后面会介绍它的作用。
HSTS 这个响应头只能用于 HTTPS 响应;网站必须使用默认端口 443;必须使用域名,而不是IP。并且启用HSTS后,一旦网站证书错误,用户无法选择忽略。
HSTS 列表
可见HSTS可以很好的解决HTTPS降级攻击,但是HSTS生效前的第一个HTTP请求仍然无法避免被劫持。为了解决这个问题,浏览器厂商提出了HSTS List方案:内置列表,对于列表中的域名,即使用户之前没有访问过,也会使用HTTPS协议;该列表可以定期更新。
目前此列表由 、 、 、 、 IE 11 和 Edge 维护。如果您想将您的域名添加到此列表中,您首先需要满足以下条件:
即使满足以上所有条件,您也可能无法进入HSTS列表,更多信息可以在这里找到。通过 的://net-/#hsts 工具可以查看某个网站是否在列表中,也可以手动将域名添加到本地列表中。
我对 HSTS 和 HSTS List 的建议是,只要您不能确保 HTTPS 服务始终可用,就不要启用它。因为一旦HSTS生效,如果你想把网站重定向到HTTP,老用户会被无限重定向。唯一的办法就是改域名。
CDN 安全
对于大型站点,必须在整个站点迁移到HTTPS后使用CDN,但必须选择支持HTTPS的CDN。如果使用第三方 CDN,则需要考虑一些安全问题。
合理使用 SRI
HTTPS可以防止数据在传输过程中被篡改,合法的证书也可以起到验证服务器身份的作用。但是如果CDN服务器被攻破,导致服务器上的静态文件被篡改,HTTPS就无能为力了。
W3C 的 SRI( ) 规范可以用来解决这个问题。 SRI 使浏览器在页面引用资源时,通过指定资源的摘要签名来验证资源是否被篡改。只要页面未被篡改,SRI 策略就是可靠的。
有关 SRI 的更多信息,请参阅我之前的介绍。 SRI 不是 HTTPS 独有的,但如果主页被劫持配置burpsuit谷歌浏览器证书及HSTS问题处理,攻击者可以轻松删除资源摘要,从而失去浏览器的 SRI 验证机制。
了解 SSL
另外一个问题是,在使用第三方CDN的HTTPS服务时,如果要使用自己的域名,需要将对应的证书私钥给第三方,这也是高风险的东西。
公司针对这种情况开发了 SSL 技术。您可以提供实时计算的密钥,而不是将证书的私钥提供给第三方。当 CDN 需要使用私钥时,通过加密通道将必要的参数传递给 Key,Key 计算结果并返回。整个过程中,私钥保存在自己的Key中,不会暴露给第三方。
此机制已开源。更多详情,您可以查看他们的官方博客上的这篇文章:SSL: The Nitty。
好了,这篇文章就先写到这里。需要注意的是,本文中提到的 CSP、HSTS 和 SRI 等策略只支持最新的浏览器。您可以查看详细的支持。切换到HTTPS之后,在性能优化方面还有很多新的工作要做。我在以前的博客中写了很多关于这部分的内容。我不会在这里重复。 2是正确的方法。
原文:
剁手交流群:
评论留言