HTTP劫持和DNS劫持
HTTP劫持和DNS劫持
首先对运营商的劫持行为做一些分析,他们的目的无非就是赚钱,而赚钱的方式有两种:
1、对正常网站加入额外的广告,这包括网页内浮层或弹出广告窗口;
2、针对一些广告联盟或带推广链接的网站,加入推广尾巴。例如普通访问百度首页,被前置跳转为http://www.baidu.com/?tn=90509114_hao_pg
----------------------------
关于全站https必要性http流量劫持、dns劫持等相关技术 - 流风,飘然的风 - 博客园
https://www.cnblogs.com/zdz8207/p/https-framework-zatan.html
网站app被劫持怎么办?HTTPDNS阿里云域名防劫持, DNSPod 移动解析服务 D+ - 流风,飘然的风 - 博客园
http://www.cnblogs.com/zdz8207/p/doman-HTTPDNS-DNSPod.html
-----------------------------
在具体的做法上,一般分为DNS劫持和HTTP劫持。
DNS劫持:
一般而言,用户上网的DNS服务器都是运营商分配的,所以,在这个节点上,运营商可以为所欲为。
例如,访问http://xxx.qq.com/index.html,正常DNS应该返回腾讯的ip,而DNS劫持后,会返回一个运营商的中间服务器ip。访问该服务器会一致性的返回302,让用户浏览器跳转到预处理好的带广告的网页,在该网页中再通过iframe打开用户原来访问的地址。
HTTP劫持:
在运营商的路由器节点上,设置协议检测,一旦发现是HTTP请求,而且是html类型请求,则拦截处理。后续做法往往分为2种,1种是类似DNS劫持返回302让用户浏览器跳转到另外的地址,还有1种是在服务器返回的HTML数据中插入js或dom节点(广告)。
在用户角度,这些劫持的表现分为:
1、网址被无辜跳转,多了推广尾巴;
2、页面出现额外的广告(iframe模式或者直接同页面插入了dom节点)。
-----------------------------
处理办法:
1、先对外网做检测,上报被劫持的情况。
对于我这个业务而言,加推广尾巴没意义,那么就剩下植入广告的问题了。页面广告可能通过iframe方式,也可以通过dom节点方式,需要在首页检查这两种情况。
window.addEventListener('DOMNodeInserted', checkDivHijack);
function checkDivHijack(e) {
var html = e ? (e.srcElement.outerHTML || e.srcElement.wholeText) : $('html').html();
var reg = /http:\/\/([^\/]+)\//g;
var urlList = html.match(reg);
if (!urlList || urlList.length == 0) {
return;
}
reg = /^http:\/\/(.*\.qq\.com|.*\.gtimg\.cn|.*\.qlogo\.cn|.*\.qpic\.cn|.*\.wanggou\.com)\/$/;
var hijack = false;
for (var i = 0; i < urlList.length; i++) {
if (!reg.test(urlList[i])) {
hijack = true;
break;
}
}
}
(注:事后发现这个url检查不够严谨,虽然劫持的情况都能发现,但也把产品原有的一些正常插入做劫持误报了。例如<a href="http://jiankang.qq.com" data-id="1">,不过这个是小细节,把正则表达式完善一下就ok了)
2、针对被iframe加载的情况,需要先找到运营商设置的劫持规律。
在iframe中的网页能正常打开,而不是又被拦截加iframe,可能是因为请求的url上或cookie上运营商做了标记。我们可以利用这个规则,躲过劫持。
3、针对注入dom节点的情况,初始化时做检查,而且后续dom注入也做检查。可以检查dom中是否含有白名单以外的http链接,如果有,就可以判定为http劫持。
4、在前端以外的处理办法还有
a) 终端拦截所有返回包,判断ip来自黑名单(劫持的中间ip)则丢弃返回包。
这种做法的原因是,运营商劫持http请求后,并不是完全丢弃请求包,而是做了复制,一份继续发给目标服务器,另外一份做劫持处理直接返回302。因为这个302会比目标服务器的正常返回早得多,所以用户浏览器会只认第一个302,而丢弃后到的正常返回。
如果先把第一个302丢弃,等待后续正常返回,则问题解决。
b) 终端拦截请求包,并拆包发送。
运营商一般判断是否劫持,通过判断是否HTTP请求。 一般只会检测TCP连接建立后的第一个数据包,如果其是一个完整的HTTP协议才会被标记;如果并非是一个完整的HTTP协议,由于无法得到足够多的劫持信息,所以并不会被标记为HTTP协议。
所以,只要把请求包切得足够细,就能躲过一部分劫持(如果运营商学习“墙”大力气做多包拦截就没辙了)。
5、当然,最终,根本解决办法是使用HTTPS,不过这个涉及到很多业务的修改,成本较高。如果劫持比例小,也许通过适当的补救做法会更好。
来看看检测到的劫持情况:
总体1500万pv的业务,一天竟然有100万的劫持上报,即使排除一半的误报,也代表说20个用户中,就接近有1个用户出现被劫持的情况。
可见,各种小运营商(尤其是移动)很黑!
各种劫持的手段都有:
1、直接返回一个带广告的HTML;
2、在原html中插入js,再通过js脚本安插广告;
3、iframe展示原来正常网页。
HTTP劫持和DNS劫持的更多相关文章
- 【HTTP劫持和DNS劫持】腾讯的实际业务分析
简单介绍一下HTTP劫持和DNS劫持的概念,也就是运营商通过某些方式篡改了用户正常访问的网页,插入广告或者其他一些杂七杂八的东西. 首先对运营商的劫持行为做一些分析,他们的目的无非 ...
- 关于全站https必要性http流量劫持、dns劫持等相关技术
关于全站https必要性http流量劫持.dns劫持等相关技术 微信已经要求微信支付,申请退款功能必须12月7号之前必须使用https证书了(其他目前为建议使用https),IOS也是2017年1月1 ...
- 【HTTP劫持和DNS劫持】实际JS对抗
1.对于DIV注入的,可以初始化时检查全部html代码. 检测是否被劫持比较简单,但对抗就略麻烦,这个在说完第2点之后再解释. 2.对于js注入,可以在window监听DOMNodeInserted事 ...
- DNS 劫持、HTTP 劫持与 DNS 污染
本文为本人的学习笔记,不保证正确. DNS 劫持 指DNS服务器被控制,查询DNS时,服务器直接返回给你它想让你看的信息.这种问题常为 ISP 所为. 由于一般的的电脑的 DNS 服务器 的配置都为自 ...
- 手把手教你DNS劫持挂马
出品|MS08067实验室(www.ms08067.com) 本文作者:BlackCat(Ms08067内网安全小组成员) 首先学习DNS劫持之前,务必要了解下DNS是个什么玩意. DNS(域名系统) ...
- 一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持
目录 XSS 攻击 SQL 注入 CSRF 攻击 DDOS 攻击 DNS 劫持 XSS 攻击 全称跨站脚本攻击 Cross Site Scripting 为了与重叠样式表 CSS 进行区分,所以换了另 ...
- openwrt-智能路由器hack技术(1)---"DNS劫持"
openwrt-智能路由器hack技术(1)---"DNS劫持" 1 导读 PS:之前写的一个文章,现在发现结构内容排版不是太好,导致阅读体验太差,影响传播和SEO,所以现在整 ...
- DNS劫持解决方法
刚在家上网,发自己的浏览器竟然还会弹出页面广告(我浏览器装了屏蔽广告的浏览器应用,理论上就不会出现什么弹出来的广告). 于是自己仔细研究了下,发现在易迅的页面竟然嵌套了一个iframe,首先易迅肯定不 ...
- DNS劫持和DNS污染的区别
我们知道,某些网络运营商为了某些目的,对DNS进行了某些操作,导致使用ISP的正常上网设置无法通过域名取得正确的IP地址.常用的手段有:DNS劫持和DNS污染. 什么是DNS劫持 DNS劫持就是通过劫 ...
随机推荐
- 小甲鱼Python第十七讲课后习题
笔记: 1.分清楚形参和实参 2.函数文档:是函数的一部分,于解释不同,使用help(函数名)或者 函数名__doc__可以查看到 3.关键字参数(在一个函数的参数较多的时候作用比较明显): 给参数的 ...
- nagios的安装与部署
参考文献: https://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html https://www.jianshu.com/p/3476d ...
- 2018-2019-1 20189210 《LInux内核原理与分析》第七周作业
一 .Linux内核创建一个新进程的过程 1.操作系统内核三大功能是进程管理,内存管理,文件系统,最核心的是进程管理. 2.对应的三个抽象的概念是进程,虚拟内存和文件.其中,操作系统最核心的功能是进程 ...
- [LeetCode] Global and Local Inversions 全局与局部的倒置
We have some permutation A of [0, 1, ..., N - 1], where N is the length of A. The number of (global) ...
- jquery各版本
各版本下载: https://www.jb51.net/zt/jquerydown.htm
- DTcms 模版用vs2015或2017 打开编辑时候 粘贴出问题 代码被调整
因为模版语言不是标准的HTML格式 ,所以HTML粘帖的时候会格式化 导致原标签出问题,这里修改下就可以了
- 20165311《网络对抗技术》Exp1 PC平台逆向破解
实验要求: 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 掌握反汇编与十六进制编程器 能正确修改机器指令改变程序执行流程 能正确构造payload进行bof攻击 实验内容: 手工修 ...
- JAR包结构,META-INF/MANIFEST.MF文件详细说明[全部属性][打包][JDK]
转载请注:[https://www.cnblogs.com/applerosa/p/9736729.html] 常见的属性 jar文件的用途 压缩的和未压缩的 jar工具 可执行的JAR 1.创建可执 ...
- js canvas获取图片base64 dataUrl
function getImgBase64(path, callback) { var img = new Image(); img.src = path; //图片加载完成后触发 img.onloa ...
- C++编程剖析 问题 方案 和设计准则
1.Set的每个对象为什么会有三个指针? STL中的set使用方法详细!!!! 因为其底层是红黑树实现的,每个节点有两个子节点和一个父节点,所以需要三个指针. Set 与 map的区别是什么? 总的来 ...