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);functioncheckDivHijack(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展示原来正常网页。

转载于:https://www.cnblogs.com/zdz8207/p/10729294.html

HTTP劫持和DNS劫持相关推荐

  1. android 访问服务器sql_XSS 攻击、CSRF 攻击、SQL 注入、流量劫持(DNS 劫持、HTTP 劫持)—— 浏览器安全

    今天看了 jsliang 大佬关于网络安全的文章,为了加深一下印象,自己动手写一下. 主要参考文章:网络安全 --- jsliang XSS攻击 XSS(Cross Site Script)跨站脚本攻 ...

  2. 【HTTP劫持和DNS劫持】

    [HTTP劫持和DNS劫持] 简单介绍一下HTTP劫持和DNS劫持的概念,也就是运营商通过某些方式篡改了用户正常访问的网页,插入广告或者其他一些杂七杂八的东西.  首先对运营商的劫持行为做一些分析,他 ...

  3. 流量劫持和dns劫持_劫持小偷的心

    流量劫持和dns劫持 海边的客房-爱德华·霍珀 每年夏天,曼利·科索(Manly Corso)的当地人和游客都会化为一口渴的泳客的浓浆. 当您从海滩上淤泥流到拥挤的摊贩时,它的一致性是不明显的-不容忍 ...

  4. 什么是DNS劫持?DNS劫持主要有哪些方式?

    一.什么是DNS劫持? 我们直到DNS负责将域名翻译成由计算机识别的IP地址,从而完成网络的链接访问.但如果通过某种技术手段,取得域名的解析控制权,修改域名的解析记录,将该域名对应的IP地址指向非法地 ...

  5. java 实现dns劫持_什么是HTTP劫持和DNS劫持

    HTTP劫持 在用户的客户端与其要访问的服务器经过网络协议协调后,二者之间建立了一条专用的数据通道,用户端程序在系统中开放指定网络端口用于接收数据报文,服务器端将全部数据按指定网络协议规则进行分解打包 ...

  6. 了解DNS劫持及dns劫持修复方法

    DNS劫持是指网络犯罪分子劫持用户的DNS流量.通常,当用户的设备要求特定网站的地址时,将使用流氓或遭到破坏的DNS服务器来返回假IP地址.DNS劫持可用于网络钓鱼和欺骗攻击,目的是从在线用户那里窃取 ...

  7. 如何查询自家的网络有没有被DNS劫持?dns劫持是什么

    如何查看自家的网络有没有被DNS劫持?想必大家很想了解这方面的内容,下面小编给大家分享一下,希望可以帮助到大家. 在IE浏览器中输入网址并回车,如果直接显示该网址,证明DNS是正常的. 如果地址栏会跳 ...

  8. 什么是DNS劫持与DNS劫持常见手段总结

    DNS劫持又称域名劫持,是指通过某些手段取得某bai域名的解析控制权,修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址.DNS ...

  9. ios如何解除dns被劫持_iOS - DNS劫持

    ******科普** 1.DNS劫持的危害 不知道大家有没有发现这样一个现象,在打开一些网页的时候会弹出一些与所浏览网页不相关的内容比如这样奇(se)怪(qing)的东西 图一 或者这样 图二 ,其实 ...

最新文章

  1. 【ACM】LightOJ - 1010 Knights in Chessboard(不是搜索...)
  2. 机器人学一些概念2——四元数,D-H 参数
  3. oracle怎么以时间排序,oracle指定数据排序在前面怎么处理
  4. 2950交换机简明配置维护手册
  5. 纯干货,用好PPT中的异形,提高页面的设计感,建议收藏!
  6. 衡量测试的充分性和完整性-测试覆盖率
  7. excel合并两列内容_Excel中如何跳过空单元格进行粘贴
  8. CSS——文字溢出省略成点点点
  9. defineProperty 和 proxy 的区别
  10. Shopify API接入
  11. 将数据库中的树类型表,递归形成json 格式
  12. 【微信小程序】企业付款接口
  13. Marvin java图像处理
  14. java 时间差 long,java计算时间差及比较时间大小
  15. ZUCC_离散数学基础__简单期末复习整理
  16. 6月2亚欧盘黄金走势分析交易策略小心空头反击高位谨慎追多
  17. 【C++从青铜到王者】第一篇:C++入门
  18. 未能写入输出文件..”--“拒绝访问。”的解决办法 [转]
  19. JDK1.6中文版下载
  20. 说点理论-什么叫TED背景

热门文章

  1. html带滚动条的文本框自动滚,Powerpoint中实现带滚动条文本框的技巧
  2. LaTeX环境介绍与安装
  3. 常见硬件术语手册!绝对权威!(转!)十一、扫描仪术语解释
  4. [论文笔记]Vision-Based Trajectory Planning via Imitation Learning for Autonomous Vehicles
  5. 一次医院挂号系统崩溃带来的启发
  6. 中国信通院、清华大学、腾讯安全,云原生安全产学研用强强联合!
  7. Android开发保存QQ密码
  8. 【C语言】简单判断字符串是否为回文
  9. 树——牛客网刷题第一波
  10. java外文翻译范文_电子商务毕业论文外文翻译范文《JavaandtheInternet》