干货!防运营商劫持

一、什么是运营商劫持

什么是运营商:

运营商是指那些提供宽带服务的ISP,包括三大运营商中国电信、中国移动、中国联通,还有一些小运营商,比如长城宽带、歌华有线宽带。运营商提供最最基础的网络服务,掌握着通往用户物理大门的钥匙,目前运营商劫持很普遍。

举个劫持的栗子:

劫持方式:

运营商比较常见的作恶方式有三种,分别是DNS劫持、HTTP劫持、HTTPS劫持:

DNS劫持:这种劫持会把你重新定位到其它网站,我们所熟悉的钓鱼网站就是这个原理。但是因为它的违法性,现在被严厉的监管起来,已经很少见。

HTTP劫持:虽然DNS劫持已经被监管了起来,但是还有HTTP劫持啊!你DNS解析的域名的IP地址不变,当运营商发现你的是HTTP请求时,就会在里面插入一些奇奇怪怪的广告(比如一些banner、浮标、更有甚把你你的商品位给劫持了 WTF...)并且这种现象十分常见,不信你可以试着随便打开一个网页,仔细看看你就会发现一些小尾巴,这就是被HTTP劫持了。

HTTPS劫持:安全的超文本传输协议,数据加密这也能劫持?答案是肯定的!该劫持方式有两种:

1.伪造证书,通过病毒或者其他方式将伪造证书的根证书安装在用户系统中(较少)

2.代理也有客户的证书与私钥,或者客户端与代理认证的时候不校验合法性,即可通过代理来与我们服务端进行数据交互(较多)

备注:使用本篇的代码一定会让你查到HTTPS劫持的(前提是使用了https)

二、防运营商劫持

准确的来说是防script、iframe注入型劫持,95%以上是这种劫持方式,因为DNS劫持被严管了。

运营商是如何劫持的,网上有很多资料,这里不多逼逼

下面是防劫持代码:


<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title>防劫持代码测试</title><script> console.log('发生劫持,初始化就直接置顶的流氓行为,暂无法防御,但可以通过埋点记录LOG,向工信部投诉!!'); </script><!-- 防劫持 --><script shendun-eddy> /** * @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 通知工信部// sendLogeleList[i].remove();}}})(); </script><script>console.log("劫持1");</script>
</head>
<body><div>防劫持代码测试</div><div class="father"><div class="bro"><div class="xiongdei"><script src="https://mt.cnzz.com/js/hdpi_canvas.js"></script></div></div></div><script src="http://zeptojs.com/zepto.min.js"></script><<img src="http://yun.dui88.com/qiho-h5/jqg/shendun_test.js"></script><script>console.log("劫持....");</script" style="margin: auto" />
</body>
</html> 

加入运营商劫持代码后,不在白名单和安全标签(shendun-eddy)内的script或者iframe都会被remove掉。

提示:network内能看到加载了其他非白名单内的script代码,但它们都没有执行

yun.dui88.com/qiho-h5/jqg… 为例,代码如下:


;(function(){console.log('哎哟,我来劫持你了...');
})() 
核心功能

MutationObserver()创建并返回一个新的 MutationObserver 它会在指定的DOM发生变化时被调用。

具体参数和用法传送门:developer.mozilla.org/zh-CN/docs/…

兼容性

所有浏览器的兼容性是92.79%,手机端的兼容性更高,代码中加了保护所以放心使用吧!

三、总结

目前运营商劫持率大约是3% ~ 25%,它们无处不在。

为了还用户一个干净安全的浏览环境,我们需要做好预防措施

1.全站https,能防一部分

2.加入防运营商劫持代码,能防大部分注入型劫持

3.记录Log,记录证据,向工信部投诉

点击这个链接领取福利:[网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!](https://mp.weixin.qq.com/s/BWb9OzaB-gVGVpkm161PMw)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的Kiko君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值