你知道DNS劫持与HTTP劫持的关系吗?

前段时间在处理iOS端的HTTPDNS相关SDK,在接入和测试环节发现大家对HTTP的整体请求流程包括HTTP劫持原理以及HTTPDNS的工作原理并不是太清楚,所以写下这边文章帮助大家深入web请求过程:如何发起请求,HTTP协议解析,DNS域名解析。

HTTP发起一个请求过程
当我们在手机端请求一个@”www.baidu.com”的域名的时候

1.请求到达运营商的DNS服务器并由其把这个域名解析成对应的IP地址。

2.根据IP地址在互联网上找到对应的服务器,向这个服务器发起一个get\post请求。

3.由这个服务器找到对应的资源原路返回给访问的用户。

这里只是一个大概的流程实际每一步都有复杂的结构和逻辑例如:服务器可能有很多台,到底指定哪台服务器来处理请求,需要一个负载均衡设备来平均分配所有用户的请求。请求的数据是存储在分布式缓存中还是一个静态文件中,或是在数据库里。当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如CSS、JS或者图片)时又会发起另外的HTTP请求,而这些请求很可能会在CDN上,那么CDN服务器上又会处理这个用户的请求。

HTTP劫持
我们使用HTTPDNS的主要目的就是解决HTTP劫持问题。HTTP的劫持分两种第一种是DNS劫持,第二种是内容劫持,后者是基于前者的基础上发展出来,是比较高级的劫持手段,目前无解,下面来分开讲解:

1、DNS劫持
劫持流程:
DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址。其实本质就是对DNS解析服务器做手脚,或者是使用伪造的DNS解析服务器可以通过下图来展示


DNS劫持原理

 

从图中可以看出红色的是劫持的流程,劫持后将你的请求转发到一个虚假的服务器。
解决办法:
DNS的劫持过程是通过攻击运营商的解析服务器来达到目的。我们可以不用运营商的DNS解析而使用自己的解析服务器或者是提前在自己的App中将解析好的域名以IP的形式发出去就可以绕过运营商DNS解析,这样一来也避免了DNS劫持的问题。
2、内容劫持
劫持流程:
内容劫持网上很少有提到,这也是在做httpDNS SDK所遇到的一个问题,其实内容劫持一开始的出发点是好的,是运营商为了加快用户的访问速度同时减少自己的流量损耗而做的一个缓存机制,用户在像服务器请求数据的时候运营商会把用户的请求转移到这个缓存池中,如果缓存中有就直接返回,没有的话再去像服务器请求然后拦截并缓存服务端给用户的回调数据,这样一来可以极大的降低运营商像服务器请求的次数,也能加快用户的访问,所以出发点是好,但是一些非法的商家对缓存池内部做一次些处理就是直接对返回的内容进行修改,这样一来我们就会接受到错误的数据

内容劫持

 

黄色线条就是比价危险的了,因为回调的数据很可能已经被篡改过。
解决办法:
现在暂时没有发现办法,不过这样的劫持不是很多。

虽然没有绝对有效的办法防止劫持,但可以提高劫持攻击的成本以此来减少此类劫持,

您可以阅读《彻底解决HTTP劫持问题-升级你的WEB服务器到HTTPS》

发表评论

邮箱地址不会被公开。 必填项已用*标注