在当今互联网时代,TLS(也常被称为 SSL)的运用能够对网络通信进行加密,为用户带来更安全的浏览体验。很容易识别出经过TLS加密的站点,其URL中会带有“https://”,而非“http://”。然而,在某些情况下,即使是HTTPS站点也可能包含一些通过明文HTTP协议加载的元素,这就形成了一种被称为混合内容的状况,有时也叫做“HTTPoverHTTPS”。
当存在混合内容时,用户可能会觉得自己处于安全的加密连接中,毕竟他们处在受HTTPS保护的站点上。但实际上,页面中的未加密元素会带来漏洞,使这些用户面临恶意活动的风险,比如未经授权的跟踪以及在传输途中的攻击等。漏洞的严重程度取决于混合内容是被动的还是主动的。
被动/显示混合内容是指未加密的HTTP内容仅限于站点上被封装起来且无法与页面其他部分交互的元素,例如图片或视频。比如,攻击者可以阻止或替换通过HTTP加载的图片,但无法修改页面的其余部分。
而主动混合内容则是指通过HTTP提供的元素或依赖项能够与整个网页进行交互并对网页做出更改,其中包括 JavaScript文件和API请求等依赖项。与被动/显示混合内容相比,主动混合内容面临的威胁更为严重。一旦被攻击,它会让攻击者控制整个网页,收集敏感的用户输入(如登录凭据),为用户提供伪造的页面,或者将用户重定向到攻击者的站点。
大多数现代网络浏览器都会在开发者控制台中针对混合内容给出警告,并且会阻止危险程度较高的混合内容类型。不同的浏览器有各自的一套规则,但一般来说,主动混合内容更有可能被阻止。
尽管被动/显示混合内容带来的威胁相对较小,但它仍然为攻击者提供了破坏隐私和跟踪用户活动的机会。此外,许多浏览器允许某些形式的被动混合内容,并且只是在开发者控制台中向用户提供混合内容警告,所以很多用户可能意识不到自己正在接触混合内容。使用过时网络浏览器的用户尤其容易受到攻击,因为这些浏览器可能根本不会阻止混合内容。
那么,为什么浏览器不直接阻止所有混合内容呢?很遗憾,大量流行网站都以某种方式提供混合内容。如果网络浏览器阻止所有混合内容,那么它提供给用户的网络内容将会非常有限。在更多网站解决这个问题之前,浏览器必须做出妥协,允许一些不太严重的混合内容形式。
如何修正混合内容错误呢?Web开发人员有责任消除混合内容。随着时间的推移,网络浏览器对混合内容的限制会越来越严格,而且这种趋势还会持续下去。所以,如果开发人员希望网络浏览器继续显示他们的站点,就必须消除混合内容。
修正混合内容错误其实并不复杂:Web开发人员需要确保其页面上的每个资源都通过HTTPS加载。在实际操作中,这可能会有些棘手,因为现代网站通常会从不同的来源加载几种不同的资源。有一个不错的工具可以帮助开发人员找出其页面中存在的所有混合内容,那就是Google Chrome开发者控制台。开发人员还可以检查自己的源代码,查找使用“http://”URL加载的资源实例,比如API调用和库。在某些情况下,解决方案只是简单地将“http://”URL替换为“https://”。但是,必须首先验证资源的HTTPS版本是否可用。如果资源的加密版本不可用,那么就需要彻底替换或删除这个资源。