汽车之家是全球访问量最大的汽车网站。为广大汽车消费者提供买车、用车、养车及与汽车生活相关的全程服务,以全面、专业、可信赖、高互动性的内容,多层次、多维度地影响最广泛的汽车消费者,是中国最具价值的互联网汽车营销平台。

在UPYUN Open Talk 第八期《移动应用技术架构的解读》技术沙龙上,来自汽车之家技术架构师莫松为开发者分享APP产品遭遇到网络劫持后的解决方案,并且分析产生劫持原因以及反劫持解决方案。

什么是 http劫持,DNS劫持为何物?

HTTP 劫持是在使用者与其目的网络服务所建立的专用数据通道中,监视特定数据信息,提示当满足设定的条件时,就会在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序解释“错误”的数据,并以弹出新窗口的形式在使用者界面展示宣传性广告或者直接显示某网站的内容。

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

【实例 1】

优酷客户端页面上方的小广告,并不是优酷所添加的,但是却出现在优酷应用中。

【实例 2】

传统浏览网页经常会弹出很多弹窗广告,现在这种情况也移植到移动互联网上。经常会弹跳出不堪入目的内容,甚至利用更加恶劣的方式弹跳广告内容。

【实例 3】

这是汽车之家的一个页面,最后在客户产生劫持的情况下,直接替换成了另外一个页面。

产生的原因

①广告插码

发布“流氓广告”的厂商以推销他们的产品形式,将广告投放到各个应用中。

②中小运营商节省流量成本,使用缓存技术,制造一个网速“飞快”的假象

一些中小运营商或者宽带运营商,为了节省流量成本,建立很多类似于缓存技术,多是做假象,直接在内部做一个缓存。

③恶意攻击

竞争对手的攻击,都是属于劫持类的。应用被非法广告植入,数据被非法缓存,被恶意攻击,已成为一种危害。

怎么劫持的呢?

劫持主要是:向客户端发起一个请求向DNS服务器,然后去请求我们的IP。这有三个因素,第一来自网络运营商的机房,这时候有一些漏洞,可能会被内部一些人员或者是一些牟利的机构加以利用。对请求的数据还有来源进行一些篡改。第二,常见的就是“三大运营商”经常做一些推广,向应用接口直接发一些他们的推广信息。他们会直接去劫持拦截你的数据,返回运营商,提示你充值一些数据。

造成的危害

①应用数据无法更新
②非法跳转,导致页面数据无法展示
③弹出广告影响视觉
④内嵌非法内容影响 APP 产品形象

反劫持实战

①数据合法性校验

合法性管理校验是唯一评判这个数据是否有效的一个手段。他包括两个内容,一个是数据是否完整,还有一个数据的时效性。

合法性的判断来说我们还是惯用的,会去用一个内容生成一个校验串,进行一个验证。如果校验串不匹配,会判定为数据是非法的,被篡改的。

②数据时效性校验

时效性的判断,我们会在数据内容有一个约定,证明数据产生的时间点,客户端有一个校验保证。针对应用里边的页面内容,会对页面的内容以及跳转地址会进行一个黑白名单的匹配,这样来去判别这些数据是否是合法的时效性保证的。

解决方案

①域名劫持

首先针对域名劫持来说,如果是DNS劫持,根据它的原理DNS是指向被篡改的IP,需要打破通用的DNS获取的方式。所以使用一种Http DNS的技术。这个技术简单来说就是使用Http的方式,将以往的传统的DNS协议替换为Http包装的域名解析的一个IP地址的集合。如果是针对Http链路层的解释,数据篡改的内容,直接对链接进行修改的重试,可以让错误的请求有机会通过我们加设的反向代理机制,帮助他在获取正确的数据。

【HttpDNS的原理】

首先这是一个终端用户,他以前获取目标服务器的方式直接提供域名,访问目标服务器。现在如果他根据之前的图示,他走传统的DNS解析服务器方式的话,如果遭受DNS解析,他可能指向错误的服务器。这个HttpDNS方式就是打破传统的DNS解析的路径,将DNS通过一个HttpDNS服务器的方式去帮他去从真正的DNS服务器,把目标IP方式返回到最终用户。用户再根据返回的真正的IP地址去返回目标服务器。通过这个方式去对DNS劫持方式进行一个有效的访问率的反制。有时候他返回的IP可能不止一个,客户端拿到IP以后,在客户端来说是注意加速请求的响应,客户端有对被审的IP进行一个测速。每次会根据一个失效周期会阶段性的对这个IP进行速度的测速,实时转换。这样保证我们提供的IP是最快速,能够让用户这些请求快速的达到正确的。

②运营商缓存

运营商缓存这种情况来说,他也是缓存的机制。可以在他的请求的Url串里面添加,缓存运作,这时候可以把缓存的方式来得到解决。

③非法跳转

非法跳转是在客户端的浏览器的加载,应用黑白名单策略的匹配。通过这些方式来去实现反劫持的一些措施。

④非法内容插入

更多方式

①网络择优

②劫持日志系统

首先他会能够根据我们之前的如何判定一个劫持的情况,在客户端搜集劫持的一个状况,他会把劫持的类型部分被劫持的接口给客户端,通过在有网比较快速的情况下,WIFI情况下发送中心服务器去实现这样的搜集。并且他是经过压缩,尽可能的保护流量的节省。

实时数据检测:


这是反劫持后台日志一个位置的图表,纵向是这一天当中发生的劫持的数量,单位是接口请求数量。横向是每个时间点他产生劫持的情况。今天从0点到24点区间产生劫持的一个数量。还有一个数据是橙色这个线,昨天的数量,蓝色是今天,我们会有一个两天之内的对比,用来发现变化。某些时候运营商的DNS解析,他有时候会爆发性的增长,他在某一天有别的活动,他给你劫持很多接口,向移动用户返回他们的促销信息,他被篡改之后的弹窗或者是嵌入式广告。我们能在图表里面发现这个类别里面的情况,有时候运营商做这个事情他的数量会激增,跟前一天有很强烈的比较。出现这样的情况,通过日志里它的劫持样本,就能发现他具体的原因。如果当原因发现某个地区的用户,出现大面积的接口访问错误,我们通过这个表能够找到答案

成功率对比:


这个表格是产生劫持以及客户端去用我们反侦策略去重试结果反馈表。白色这个柱状高度表现是他产生的总体数量,绿色这部分表示是改善之后一个成功的数量。绿色这部分是产生的劫持,使用反劫持策略,成功修复的一个数量。通过这个表格,不断的调整优化反劫持的策略,逐渐去努力把白色区域慢慢消除,或者是减小。实际上分析的时候发现,这个数据表跟当日PV还是能够吻合,也同时验证判断的结果。比如对劫持类型,劫持发生的时机那种方式是有效的。这种日志系统不管是对于PV或者用户行为统计还是对这种劫持的防御工作来说都是很重要。

移动开发构架漫谈——反劫持实战篇相关推荐

  1. 开发人员MySQL调优-实战篇2-让SQL使用索引详解

    2019独角兽企业重金招聘Python工程师标准>>> 建议先看看开发人员MySQL调优-实战篇0 让执行的SQL使用索引 虽然DBA给我们建了很多索引,但没有经验的开发人员往往只看 ...

  2. 代码编程教学_少儿编程教学环境开发之代码实战篇

    少儿编程教学环境开发之代码实战篇​mp.weixin.qq.com 之前架构选型篇许诺要上自己原型demo的界面图,先把这个许诺给实现了,首先声明,这只是技术原型demo,比起http://code. ...

  3. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五)

    基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五) 转载于:https://github.com/Meowv/Blog 上篇文章完成了文章详情页数据查询和清除缓存 ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)

    基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四) 转载于:https://github.com/Meowv/Blog 上篇文章完成了文章增删改的接口和友情链接列 ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)

    基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三) 转载于:https://github.com/Meowv/Blog 上篇文章完成了分类和标签页面相关的共6个接 ...

  6. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(二)

    基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(二) 转载于:https://github.com/Meowv/Blog 上篇文章完成了两个接口:文章列表页.文章详 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一)

    基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一) 转载于:https://github.com/Meowv/Blog 现在博客数据库中的数据是比较混乱的,为了看 ...

  8. 微信小程序|开发实战篇之一

    开发实战篇之一 前言 1.通用方法的封装 2.数据获取方法的封装 2.1 抽离classic.js中的request()方法 2.2 组件数据传递 3.movie组件的创建 3.1 组件代码开发 3. ...

  9. 微信小程序|开发实战篇之request请求(单个、多个参数,json对象,header)

    开发实战篇之request请求 前言 1.发送单个.多个参数的request 2.发送JSON对象的request 3.发送header的request 前言 小程序发送网络请求常会遇到的问题: 请求 ...

  10. 微信小程序|开发实战篇之九-image-picker图片选择器组件及其子组件

    开发实战篇之九 前言 1.grid格子组件 1.1 grid骨架文件wxml 1.2 grid的js文件分析 1.3 grid-item的wxml文件分析 1.4 grid-item的wxss文件分析 ...

最新文章

  1. java算法面试题_【干货】经典算法面试题代码实现-Java版
  2. MySQL—05—MySQL如何处理SQL语句;MySQL数据库存储引擎介绍;
  3. 确保nginx安全的10个技巧
  4. .net平台的rabbitmq使用封装
  5. centos apt-get java_CentOS安装jdk的三种方法
  6. webpack 阅读笔记
  7. php ajax 加载列表,Ajax点击不断加载数据列表(图文教程)
  8. 7-64 计算平均成绩 (15 分)
  9. 使用JavaScript和D3.js实现数据可视化
  10. 脉冲神经网络的开发公司AI-CTX
  11. Netty工作笔记0065---WebSocket长连接开发4
  12. android windowmanager 无法传递事件_面试常客:Intent 能传递多大 Size 的数据?| 附阿里的建议方案!...
  13. 初级第四旬06— 回向与发愿试题
  14. java静态引用_Java开发中静态方法引用和实例方法引用案例详细讲解
  15. k3 lede刷官改_斐讯 K3 路由 LEDE 固件刷回官方原版固件
  16. c#中datagridview清空数据并删除空白行
  17. LittleVGL体验记录
  18. 读梁宁《增长思维30讲》
  19. 牛顿-莱布尼兹公式的几何意义-微分和积分的几何关系
  20. 中山マミ - 彼女×彼女×彼女 ~今夜はぎゅっと抱きしめてね~

热门文章

  1. python蒙特卡洛仿真_蒙特卡洛模拟Ising模型(附Python代码)
  2. c语言程序设计电子科技大学,C语言程序设计
  3. matlab中小波工具箱,matlab小波分析工具箱使用教程
  4. DWM1000模块简介
  5. 你是一名技术管理者还是项目管理者?
  6. 群的概念,双线性映射
  7. Origin好友列表离线的解决办法汇总
  8. 利用detours实现API劫持
  9. 同济版《线性代数》引发激烈争议!
  10. 一文学会LCD12864显示中文、英文、反显