目前从部分用户反映,我们的移动终端页面受到dns劫持并插入广告的情况,此工具能够查找被插入的代码,并把劫持方式上报
目前我们面临的运营商页面劫持主要是以下两种形式:
- 修改我们的页面HTML源码,直接插入广告dom元素(以iframe div 等常见)
- 修改页面HTML源代码,插入可以动态执行的javascript脚本程序,程序在用户侧(浏览器/App内置浏览容器)执行后,生成广告内容
针对上述形式的页面篡改劫持,根据其产生的原理和时机,解决途径有两类:
-
事前预防,目前我们传输最终可见内容主要采用HTTP协议(HTML),通过调整网络传输协议(二进制协议)或内容加载方式(HTML文件先下载再展示;App通过JSON获取专题内容,native显示)可以彻底解决,但涉及资源投入较多,成本略高
-
事后修正,在用户终端展示的时候检测页面纂改情况,并作修复。目前已经在进行demo开发的解决方案有: HTML关键内容自定义样式修饰,页面加载(onLoad)之后周期性检测并剔除未被修饰的页面元素。考虑到客户端性能,若干个周期后检测结束 页面结构(DOM)白名单,对每个dom元素增加特定属性标签,周期便利整个页面,剔除dom tree上的非法节点。该方案可以彻底解决页面纂改问题,但是对页面性能有影响
综合各方案的优缺点,优先考虑事后修正的技术实现,并协调App开发资源进行事前预防的技术排期
- git clone https://github.com/lexuslin/anti-dns-hijecking.git 下载代码
- bower install 下载依赖的JS库,保存在src/component目录下
- npm install 加载依赖
- 修改config.json,name是当前项目名称,为了减少项目名称冲突的几率,建议加上当前日期如: dns_ggk_20141224
- 把需要加入反劫持代码的html页面放在src目录下,执行grunt,自动添加反劫持代码(具体是为每个dom元素添加一个特殊的属性anti-hijecking,在标签前加入反劫持相关JS)