不得不说,做开发这么多年,流量劫持这个东西,大都只是:“听说过,没见过,两万五千里~”。这次结结实实被坑了一把,还是头一回。出来混,该经历的逃不过。
说来你不信
话说朋友的技术团队(坐标天津)开发了个小网站,我担任后端技术架构。此事不足一表,且略过不提。就说这个网站App测试的时候,手机连上公司wifi访问之,然后对着我们的小网站戳戳点点,点着点着,居然出了个这玩意:
页面网址是:砸金蛋页面 https://display.intdmp.com...。
奇怪了,明明是我们自己开发的网页,怎么会跳转到代码中并不存在的外链?我当时的第一反应是我们自己的代码或者代码依赖有问题,然而经过排查,并没有发现问题代码。
后来,由于这个问题复现几率不高,就先搁置了下来。
直到近日,又一次复现了该问题,然而并没有跳转到之前砸金蛋页面,而是最终跳转到了:
nnd,太猖狂了,黄色小说都放出来了!
无独有偶
上网一搜,发现我们并不是唯一的受害者:
还有知乎上的热帖:
以及相关新闻:
同时也据此料定,此事十有八九是天津联通搞得鬼。
理由有三:
- 我们的复现场景都是在连接到天津联通宽带下接的wifi环境中,使用过天津市不同地区的多款不同路由器。也就是说只要用的天津联通宽带,都基本能复现出这个问题。
- 网上搜到的基本都是天津用户反馈,而且和我们的推断一致,是运营商的锅。
- 手机4G网络用户或其他地区用户没有此问题的反馈,我们实测也没能在其他地区复现该问题。
现场勘查
那就简单了,抓包呗,拿到案发现场!
因为急于找到问题原因,我们仅仅使用了Charles代理抓包,现在想来,应该使用更强大的Wireshark,可以扒下流量劫持的底裤看清楚!后续如果用wireshark抓到再把抓到的包贴出来。
不过Charles也足以保留现场,让问题见于水面!
由于此事联通做的十分露骨,很快我们就抓包成功,一睹如下:
可以看到,在访问我们的主页(测试环境)时(大家可以自行访问下,看看正确的返回内容),没有返回预期内容,而是返回了这样一段html:
<html><!-- 60 -->
<head><meta charset="utf-8"><meta name="viewport" content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width"/></head>
<script language=JScript><!-- function killErrors(){return true;} window.onerror=killErrors; --></script><frameset rows="*,0">
<frame src="http://su.qichexin.com/s/tji2.html" noresize><frame src="" noresize></frameset>
</html>
相应的返回头http header也明显不对,一看就是为了抹除证据伪造的,没有任何trace来track。
可以看到,经过一系列各种形式的跳转,才最终把小黄文带了出来。本人之前是做海外互联网广告的,所以对抓包中的跳转过程比较熟悉,之所以要经历很多http跳转,是要为第三方或网盟确认一次有效的转化跳转来作为未来广告主为展示付费的数据参考。因此,这其中必有一条隐秘的黑产无疑,他们通过随机地、偶发性地劫持流量,而后将这些劫持的流量以一定的价格贩售,攫取利益,并形成了一个个有组织的小型产业链条。
好吧这也许在国内不算什么。然而让我震惊的是,居然可以无耻到为色情文学导量,真可谓脸皮共帽子一色,底线与底裤齐飞。
抓包文件此处领取:百度网盘chls文件
有恨无人省
尽管证据已经拿到,此事依然让人无奈。你搞个色情文学,开发蜀黍都不好意思给自己的孩子看自己做的网站,万一弹出色情文学,岂不尴尬!
此外,解决方案上:
技术上,如果不采用https,这种劫持很难避免,因为是整个http层面(应用层)的拦截,前端页面想绕过,需要改的东西太多。所以,上https就好了。不过前两天我们测试反馈,nnd上了https后也被劫持了,这个...有可能吗?百思不得其解...https有非对称加密加持,专门用于防止中间人篡改,联通这tm也能绕过?由于没能保留现场,所以究竟如何不得而知,姑且当做看花眼了吧(或者是https中内嵌了http流量导致的)。总之,**上https!上https!上https!**重要的事情说三遍。
法理上,其实也怕冤枉天津联通(就算是天津联通,如知乎上所说,一定也是内部有人作祟,联通没必要赚这点黑钱),人家派公安局来抓肿么办;其次,投诉维权可以,但是能见结果很难。
不是一个人在战斗
遇到此坑,相信自己不是一个人在战斗。所以在此也希望各位技术大牛看官帮忙,一是求教,技术上如果不采用https,有没有相对简单可行的手段解决,避免被劫持,或者来谈谈这种流量劫持技术的原理;二是可以帮忙转发,曝光此事。本文断不附带任何与问题无关的推广内容。