运营商劫持.part.1 iframe篇

DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。

想都不用想,上面这一段就是哪里抄的。

这里讲到一种劫持的场景:运营商将原有的文件返回之后,添加一段代码,在这段代码里做插入iframe的操作,并且这个iframe的id是以ads开头的…具体问题具体分析,给出的应对策略是:做循环检测,将插入的这个iframe再移除掉。

处理上相对来说也比较简单:
支持 html 5的浏览器,使用MutationObserver监测dom改变(需要注意它的监测只针对改变的根元素,不考虑这个元素的子元素,因此需要对其子孙元素做遍历),不支持的浏览器则使用定时器每隔一段时间去搜索。

判断的条件为:

  • iframe
  • src 不在设定的白名单内(前提是不为空,src是一个链接)或者,其带了ads开头的id

满足以上条件及对插入的iframe做移除。

一些注意点有:
iframe src为空时候,通过获取获得的src即为当前页面链接,因此它的判断应为:

1
2
3
var isEmpty = function (src) {
return src === '' || src === window.location.href;
};

iframe src的判断,还需要照顾到其不是链接的情况,比如百度的ueditor编辑器插件就会插入iframe,它的src就是一个段可执行的脚本或者about:blank;

此外,还有一个更具体的操作,针对一个特定地域的特定劫持,会产生一个BCMain的对象来请求特定ip的资源,这部分则在浏览器支持的前提下使用definePropertyObject.freeze来对对象做“冻结”操作(这部分是否生效仍未知)。

具体的代码请访问:ispAd.js

感谢: