一、什么是运营商劫持什么是运营商:运营商是指那些提供宽带服务的ISP,包括三大运营商中国电信、中国移动、中国联通,还有一些小运营商,比如长城宽带、歌华有线宽带。运营商提供最最基础的网络服务,掌握着通往用户物理大门的钥匙,目前运营商劫持很普遍。
举个劫持的栗子:
劫持方式:运营商比较常见的作恶方式有三种,分别是DNS劫持、HTTP劫持、HTTPS劫持:
DNS劫持:这种劫持会把你重新定位到其它网站,我们所熟悉的钓鱼网站就是这个原理。但是因为它的违法性,现在被严厉的监管起来,已经很少见。
HTTP劫持:虽然DNS劫持已经被监管了起来,但是还有HTTP劫持啊!你DNS解析的域名的IP地址不变,当运营商发现你的是HTTP请求时,就会在里面插入一些奇奇怪怪的广告(比如一些banner、浮标、更有甚把你你的商品位给劫持了 WTF...)并且这种现象十分常见,不信你可以试着随便打开一个网页,仔细看看你就会发现一些小尾巴,这就是被HTTP劫持了。
HTTPS劫持:安全的超文本传输协议,数据加密这也能劫持?答案是肯定的!该劫持方式有两种:
IIS7网站监控工具可以做到提前预防各类网站劫持、并且是免费在线查询、适用于各大站长、政府网站、学校、公司、医院等网站。他可以做到24小时定时监控、同时它可以让你知道网站是否被黑、被入侵、被改标题、被挂黑链、被劫持、被墙及DNS是否被污染等等功能、更是拥有独家检测网站真实的完全打开时间、让你作为站长能清楚的知道自己网站的健康情况!官方地址:IIS7服务器管理工具官方图
伪造证书,通过病毒或者其他方式将伪造证书的根证书安装在用户系统中(较少)代理也有客户的证书与私钥,或者客户端与代理认证的时候不校验合法性,即可通过代理来与我们服务端进行数据交互(较多)备注:使用本篇的代码一定会让你查到HTTPS劫持的(前提是使用了https)
二、防运营商劫持准确的来说是防script、iframe注入型劫持,95%以上是这种劫持方式,因为DNS劫持被严管了。
运营商是如何劫持的,网上有很多资料,这里不多逼逼
下面是防劫持代码:
console.log('发生劫持,初始化就直接置顶的流氓行为,暂无法防御,但可以通过埋点记录LOG,向工信部投诉!!');
/**
@note 防劫持代码@key MutationObserver 提供了监视对DOM树所做更改的能力*/
(function() {
var srcFilterTags = ['script', 'iframe'];
// 域名白名单 可以加多个
var whiteList = ['zeptojs.com'];
var whiteListReg = [];
// 正则匹配
whiteList.forEach(function(wl) {
var wlReg = new RegExp('/.+?//' + wl + '|//' + wl + '|.+?.' + wl + '|^' + wl);
whiteListReg.push(wlReg);
});
// 白名单助手
var inWhileList = function(addedNode) {
// shendun-eddy 是script的白名单标签
if (addedNode.src === '' && addedNode.getAttribute('shendun-eddy') !== null) {
return true;
}
var isInWhiteList = false;
whiteListReg.forEach(function(wlReg) {
if (wlReg.test(addedNode.src)) {
isInWhiteList = true;
return false;
}
});
return isInWhiteList;
};
// dom观察器
var mutationHandler = function(records) {
records.forEach(function(record) {
Array.prototype.slice.call(record.addedNodes).forEach(function(addedNode) {
srcFilterTags.forEach(function(tagName) {
// 标签匹配 白名单匹配
if (addedNode.tagName === tagName.toUpperCase() && !inWhileList(addedNode)) {
addedNode.remove();
};
});
});
})
};
// 核心 - MutationObserver 提供了监视对DOM树所做更改的能力
// 优点 - 动态监听是否有非法的 iframe 和 script 代码
// 缺点 - 无法查找头部直接插入的代码
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
observeMutationSupport = !!MutationObserver;
var html = document.getElementsByTagName('html')[0];
if (observeMutationSupport) {
new MutationObserver(mutationHandler).observe(html, {
'childList': true,
'subtree': true
});
}
// 唯独直接加载的不能remove掉,异步加载的都能remove掉!!
// 记录头部的script,通知工信部
var eleList = document.querySelectorAll('script');
var len = eleList.length;
for (var i = 0; i < len; i++) {
// 遍历操作
if (!inWhileList(eleList[i])) {
// do sth 这里的删除虽然已经晚了,因为头部同步JS已被执行,删除操作意义不大,但可以统计被劫持的代码是什么,记录好LOG 通知工信部
// sendLog
eleList[i].remove();
}
}
})();
复制代码
加入运营商劫持代码后,不在白名单和安全标签(shendun-eddy)内的script或者iframe都会被remove掉。
提示:network内能看到加载了其他非白名单内的script代码,但它们都没有执行
三、总结目前运营商劫持率大约是3% ~ 25%,它们无处不在。
为了还用户一个干净安全的浏览环境,我们需要做好预防措施
全站https,能防一部分加入防运营商劫持代码,能防大部分注入型劫持记录Log,记录证据,向工信部投诉