概述 :
Wo - 公号「八点半技术站」的创作者 - Bruce.D (姓氏:豆)。
今日主题:流量劫持、大家经常会看到公司的一些首页被插入一些小广告,这也就是流量劫持,今儿分享一下当前劫持的几个方法以及防劫持知识。
欢迎各位加入社群,技术交流不分语言、不分高低 。(本篇阅读预计花费:7分钟)
内容 :
流量劫持划分成3大部分:DNS劫持、数据劫持、劫持监控。
DNS劫持:
首先聊聊这个,域名劫持是互联网一种攻击方式,通过攻击 DNS服务器 或者 伪造DNS 服务器方法,把目标服务器网站域名解析到错误地方,让用户无法正常访问真正的地址。
这里提问一个问题:那么 DNS是如何工作的呢?
客户端访问服务端的时候,首先要根据域名获取对应的IP地址,这一步要在 DNS服务器进行获取。请求DNS服务器的时候,需要通过UDP协议去寻找当地网络的运营商提供的公共域名服务器中查找IP。
如果没有找到,就会继续请求上级域名服务器进行处理,一直到返回IP为止。
域名劫持,即使是在请求 DNS解析域名时候出现的问题,目标域名被恶意解析到其他IP地址,造成用户无法正常使用服务。
为了减少 DNS 查询时间,HTTP协议栈中会缓存域名解析:
那么再提一个问题:如何污染 DNS?
常见的污染 DNS 方式有:
那么再提一个问题:如何抵御 DNS 劫持?
解决域名劫持的一个办法就是绕开安全性较差的 UDP协议,通过一个可信的源头来解析域名,解析方式不需要拘泥于 UDP协议,也可以通过 HTTP方式。
数据劫持:
接下来聊聊数据劫持,数据劫持最基本针对明文传输的内容发生。用户发起 HTTP请求,服务器返回页面时候,经过中间的运营商网络,页面内容的篡改或者内容加塞,强行插入弹窗或者广告。
那么问题又来了:如何抵御数据劫持?
目前行业内解决的办法是对内容进行 HTTPS加密,实现密文传输,彻底避免劫持问题。MD5校验同样能起到防止数据劫持的作用,MD5校验是指内容返回前,应用层对返回的数据进行校验,生成校验值。
同时内容接收方接收到内容后,也对内容进行校验,同样生成校验值,将这俩个校验值进行对比,倘若一致,则证明判断数据无劫持。
注意:HTTPS 也能被运营商劫持
1、伪造证书,通过病毒或者其他方式将伪造证书的根证书安装在用户系统中(较少)。
2、代理也有客户的证书与私钥,或者客户端与代理认证的时候不校验合法性,即可通过代理来与我们服务端进行数据交互(较多)。
下面说几款方法对数据劫持起到监控作用,但是并不能对劫持后的页面进行修复。
两种方式开启 CSP:
// 通过 http 头信息
Content-Security-Policy: default-src https:
// 通过 meta 标签
<meta http-equiv="Content-Security-Policy" content="default-src https:" />
缺点:
将使用 base64 编码过后的文件哈希值写入你所引用的 <script> 或 <link> 标签的 integrity 属性值中即可启用子资源完整性功能。
如果校验不成功,则不会执行对应的 script 或 link 内容。
<script crossorigin="anonymous" integrity=“sha256-+Ec97...E=“ src=“https://a.com"></script>
缺点:
劫持监控:
此方案参考了美团点评 2018 前端分享上的防治方案。
上述方案可以看出,无论哪种方案,都有它的不足,于是搭建了下图的方案:
优势如下:
总结:
DNS 劫持是属于违法行为,已经在严厉打击,为了我们干净安全的上网浏览环境,我们也要做好一系列预防措施。