运营商HTTP劫持(非DNS劫持)推送广告的情况相信大家并不陌生,解决的方法大多也是投诉增值业务部门进而投诉工信部。但这种方法费时费力,投诉接听人员并不了解情况导致答非所问的情况有很多,有时候不但受气最终也没能完全解决问题,或者解决问题后过了一段时间复发的情况并不少见。
近年来,运营商HTTP劫持非但没有收敛,反而变本加厉,玩出了新花样:比如通过HTTP劫持进行密码截获的活动;比如下载软件被替换的情况;比如劫持进行返利(当然返利不是返给你)的情况。
本文介绍一种技术手段用来防止HTTP劫持,在大多数情况下不但可以解决广告推送的问题,也能解决密码截获和下载软件被替换的情况。最终的效果是运营商停止了HTTP劫持,而非劫持后通过浏览器插件进行广告过滤。此种方法的好处是既不用安装浏览器插件进行广告过滤,也不用额外的服务器(HTTP代理或VPN之类的),并且能防止下载软件被替换和返利劫持,也能在一定程度上防范密码的泄漏。
要说明这种技术手段的工作原理,首先需要说明大多数情况下运营商HTTP劫持的原理:
在用户的浏览器连上被访问的网站服务器,发送了HTTP请求后,运营商的路由器会首先收到此次HTTP请求,之后运营商路由器的旁路设备标记此TCP连接为HTTP协议,之后可以抢在网站服务器返回数据之前发送HTTP协议的302代码进行下载软件的劫持,浏览器收到302代码后就会跳转到错误的软件下载地址下载软件了,随后网站服务器的真正数据到达后反而会被丢弃。或者,旁路设备在标记此TCP连接为HTTP协议后,直接返回修改后的HTML代码,导致浏览器中被插入了运营商的广告,随后网站服务器的真正数据到达后最终也是被丢弃。
从上述原理中看出,如果需要进行HTTP劫持,首先需要进行标记:如果是HTTP协议,那么进行劫持,否则不进行劫持。那么,是否有一种方法,既可以避免被旁路设备标记为HTTP协议,而目标网站收到的仍旧是原来的HTTP请求,并且不需要任何第三方服务器呢?答案是有的:
旁路设备中检测HTTP协议的模块通常比较简单,一般只会检测TCP连接建立后的第一个数据包,如果其是一个完整的HTTP协议才会被标记;如果并非是一个完整的HTTP协议,由于无法得到足够多的劫持信息,所以并不会被标记为HTTP协议(我们伟大的防火墙并非如此,会检查后续数据包,所以这种方法无效)。了解了这种情况后,防止劫持的方法就比较简单了:将HTTP请求分拆到多个数据包内,进而骗过运营商,防止了HTTP劫持。而目标网站的操作系统的TCP/IP协议栈比较完善,收到的仍旧是完整的HTTP请求,所以也不会影响网页浏览。
那么如何将浏览器发出的HTTP请求拆分到多个数据包中呢?我们可以在本地架设一个代理服务器,在代理服务器将浏览器的HTTP请求进行拆包,浏览器设置本地的代理服务器即可。我这里经过测试,默认设置的情况下对三大运营商(电信、联通、移动)的HTTP劫持现象都有很好的抑制作用。
您好!
DNS劫持:没有按照您的要求解析到指定的IP,然而您无法控制这个域名的解析记录值。
HTTP劫持:你DNS解析的域名的IP地址正确。但访问网站直接跳转到另一个网站地址。
网页HTTP解决办法:登陆CA签发机构办理HTTPS加密协议:网页链接
DNS解决办法:并且使用速度加快的专业级DNS可以防止IP劫持。
杜绝HTTP劫持,最终解决方案还是换为HTTPS!大部分网站使用的是http协议,这种是超文本传输协议,基于TCP/IP的协议,存在着大量的灰色中间环节,随时都有可能被中间人窃取或篡改的危险。
从前几年起,谷歌等主流浏览器就已经抵制http协议,大力支持网站进行https加密协议,就连今年火起来的微信小程序的开发条件就是实现服务器端HTTPS请求,HTTPS的全称是超文本传输安全协议(Hypertext Transfer Protocol Secure),是一种网络安全传输协议。在http的基础上加入SSL/TLS来进行数据加密,保护交换数据不被泄露、窃取。
要对付运营商的DNS劫持,设置一个可靠的DNS服务器往往就可以解决问题。然而,很多朋友在设置了可靠的DNS服务器后,仍然不能解析到正确的IP地址,例如某个网站的IP地址明明是可以Ping通的,但就是无法访问。
这部分网站无法访问的原因是网站域名解析错误,而这就存在这几种可能:一是黑客攻击国外根服务器造成国内服务器域名解析遭到污染;二是由于数据传输过程中网络节点较多,节点也可能成为攻击目标;三是黑客在攻击单个网站的时候,因为节点较多,导致节点污染从而影响了全网。而上述这种情况,通常是DNS污染所导致的。
针对DNS劫持,目前唯一比较有效的办法就是加速运营商DNS缓存记录获取刷新的时间及数据,保障获取结果的准确性。