一、现象
运营商、黑客、浏览器厂商、手机厂商,通过某些方式篡改了用户正常访问的网页,插入广告或者其他一些杂七杂八的东西。
二、运营商劫持种类:
网络劫持最主要的就是运营商层面的劫持。
运营商劫持主要分两种:DNS劫持和HTTP劫持
三、DNS 劫持
DNS(Domain Name System)域名解析协议
一般而言,用户上网的DNS服务器都是运营商分配的,所以在这个节点上,运营商可以为所欲为。
例如,访问健康,正常DNS应该返回腾讯的ip,而DNS劫持后,会返回一个运营商的中间服务器ip,访问该服务器会一致性的返回302,让用户浏览器跳转到预处理好的带广告的网页,在该网页中再通过iframe打开用户原来访问的地址。
正常访问过程:1. 用户输入域名;2. DNS把域名翻译成IP传给网站;3.网站再把对应IP的网页呈现给用户
在上面第2步,DNS服务器把域名翻译成的IP被攻击者替换,攻击者劫持正确的IP,然后换成攻击者提供的自己做的网站的IP传给网站,网站调出该IP对应的网页,呈现给用户,这时用户看到的就是攻击者的网站了。这也就是DNS劫持的原理。
四、http劫持原理
在用户的浏览器连上被访问的网站服务器,发送了HTTP请求后,
运营商的路由器会首先收到此次HTTP请求,之后运营商路由器的旁路设备标记此TCP连接为HTTP协议,之后可以抢在网站服务器返回数据之前发送HTTP协议的302代码进行下载软件的劫持,浏览器收到302代码后就会跳转到错误的软件下载地址下载软件了,随后网站服务器的真正数据到达后反而会被丢弃。或者,旁路设备在标记此TCP连接为HTTP协议后,直接返回修改后的HTML代码,导致浏览器中被插入了运营商的广告,随后网站服务器的真正数据到达后最终也是被丢弃。
从上述原理中看出,如果需要进行HTTP劫持,首先需要进行标记:如果是HTTP协议,那么进行劫持,否则不进行劫持。
劫持的手段
- 直接返回一个带广告的HTML
- 在原html中插入js,再通过js脚本安插广告
- 在原来正常网页嵌入iframe
五、HTTP劫持主要步骤
- 标识HTTP连接。在TCP连接中,找出应用层采用了HTTP协议的连接,进行标识
- 篡改HTTP响应体,可以通过网关来获取数据包进行内容的篡改
- 抢先回包,将篡改后的数据包抢先正常站点返回的数据包先到达用户侧,这样后面正常的数据包在到达之后会被直接丢弃
六、防劫持方法
- 对于用户来说,最最直接的就是向运营商投诉。
- 在html 上加上<meta http-equiv="Cache-Control" content="no-siteapp"><meta http-equiv="Cache-Control" content="no-transform " /> 百度官方给的禁止转码声明。
- 在开发的网页中加入代码过滤,大概思路就是用JavaScript代码检查所有的外链是否属于白名单。
- 最有用的方式,使用HTTPS 。https协议就是http+ssl协议;https 加了SSL协议,会对数据进行加密。(SSL是SecureSocketLayer的缩写,是一种安全传输协议。)
https连接过程
- 客户端发送https请求
- 服务端接收到https请求之后,生成公钥和私钥
- 服务端返回公钥
- 客服端收到公钥,会验证公钥是否有效,如颁发机构或过期时间等,如果发现异常会抛出异常,提示证书存在问题。如果没有问题,会生成一个随机值,作为客户端的密钥,然后用服务端的公钥加密
- 加密之后,发给服务端
- 服务端收到经过加密的密钥,然后用私钥进行解密,得到客户端的密钥,然后服务端把要传输的内容和客户端的密钥进行堆成加密,这样除非知道密钥,否则无法知道传输的内容
- 服务端将经过加密的内容传给客户端
- 客户端获取加密内容后,用之前生成的密钥对其进行解密,获取到内容。