提醒:本文发布于 4 年前 ,文中所描述的信息可能已发生改变,请谨慎使用。

网站前端代码被恶意注入第三方内容,真™操蛋。

今天打开刘强东的时候,发现页面有异常,查了半天发现是猎豹免费wifi搞的鬼。

因此整理这篇文章,说说网站前端内容反注入的方案。

何时何地可以注入恶意代码

运营商

从服务器生成 HTML 代码到客户端最终下载完成,这个过程漫长且不可控。通讯过程中的任意一个结点都可以获取到传输的内容并可能篡改传输的内容。

常见的就是各地运营商私自投放的广告。

客户端

代码下载到客户端后也不一定就安全了。客户端所处的环境也是可以恶意注入代码的。例如不安全的Chrome extensions 以及前文提到的猎豹免费wifi

他们直接注入 JS 的结果就是绕过了浏览器本身跨域安全限制,直接可以获取和操作第三方平台数据。

简单说,就是可以获取你的密码,获取你的账号信息等等。

整理一下处理方案

主动防止被篡改

毋庸置疑是 SSL 加密通信。百度搜索全线 HTTPS 也是这个原因。

被动检测内容是否被篡改

不过有些网站为了性能又或者CDN部署原因,无法做到全站 https,为此百度搜索曾经采取了这样一套方案。

优先采取 http 协议通信,通过 JS 检测 HTML 中有没有第三方的 JS 代码。若发现被运营商劫持,则将当前网络信息发给服务端,服务端对后续相同网段的请求跳转至 https。

对于检测代码是否为第三方,百度当初仅仅采用了检测 HTML 代码中是否存在第三方域名的 JS 文件,简单粗暴但是有效。但是如果 js 代码直接被中间代理修改后,这个就没办法了。

于是,后面的这些文章就出来了。强烈推荐阅读