简单分析网站流量劫持防范措施(图文)

前几天上网打开163首页时,发现页面底部莫名其妙的出现一个边框。这在以前可是未曾有过的,而且以后也绝不可能会有这么丑陋的设计;查看源码才发现这显然不是网易的页面。页面里的ad字样,早已深深的出买了它,这就是个广告页面,怎样实现呢?接下来详细介绍网站流量劫持

  前几天上网打开163首页时,发现页面底部莫名其妙的出现一个边框。这在以前可是未曾有过的,而且以后也绝不可能会有这么丑陋的设计。

  趋于好奇心,立刻在边框上点了右键审查元素。尼玛,不看不知道,网易首页的HTML何时变得这么劣质了?

  没有doctype声明,连title元素都没有。script还是language=JScript风格,这得追溯到多少个世纪前了~ 最劣质的是框架居然还是元素。。。

  不用说,这显然不是网易的页面。页面里的ad字样,早已深深的出买了它,这就是个广告页面!

  话说生在天朝,对于各种劫持早已司空见惯。

  在网页里劫持广告,油价2块钱一升的时代就有了,过了世界末日依旧存在,说明其中的利益是巨大的。

  不用计算,用手指估算下就知道了。我朝有好几亿电脑和手机用户,每天有无数个网页被打开。哪怕在1%的网页里插一个广告,都有数百上千万次的展示数量,其中的商机不言而喻。。。

  尽管对此有些无奈,但只要插入的广告不影响正常上网,也没什么意见。如果水平够高,完全可以伪装成页面里本来的广告,至少形式上一样,看不出任何的破绽。这样非但不BS,反倒会有些佩服。

  然而,至今见过的各种广告劫持代码,简直一个比一个劣质。这一次见到的,算是垃圾中的战斗机了。随便找个网页编辑器,自动生成的HTML也比这强多了,再随便找些css稍微修饰下,完全就不会被一眼看出是山寨套牌网页了。尼玛的这本身就是暗地里的干活,却没有任何简单的加密混淆,还光明正大的明文写着广告字样,这不是赤果果的秀智商下限吗?

  不过今天既然花时间吐槽这破玩意,就干脆再深入的讨论讨论未来可能还会出现的变招。

Lv1. 当前最常见的:把被劫持的网页套在自己的空壳里

  其实这样做的目的很明确,让广告显示在浏览器的最上方。一般为了达到这个效果,会把广告显示在页面的右下角,盖住被劫持页面的滚动条,看起来就像是浮动在浏览器之外一样!

  这招够狠,乍一看,还真以为是QQ之类的软件弹出的消息框呢。不过只要把浏览器窗口退出最大化,顺便再拖一下窗口,广告也跟着动起来了:)假李鬼就瞬间原形毕露了!

防范措施

  这种劫持毫无技术含量可言,反劫持也相当容易。只要在自己网页里验证下window.top,是不是在合法的URL列表里。如果不是,那就不允许被内嵌在其他网页内。更好的办法就是把top地址提交到后台服务器上,统计下究竟有哪些网站套了自己的页面。

Lv2. 在返回网页里插入外链。

  于是在之后的"肃反运动"中,可以直接清洗掉了。。。

Lv4. 在返回网页的,也有可能是的内联形式。。。这下麻烦大了,我得想想怎么解决。。。

防范措施

  对于这种情况,还真找不到一个简单的方法来识别。唯一能走通的路,就是在发布HTML时,记录下文件的Hash值。可以把值写入网页,或者存在数据库里。

  当网页内容加载完成时,我们通过ajax再次读取当前页面的内容(一般来说读的就是当前页面的缓存数据)。通过同样的算法算出页面的校验值,和原始值一比对,就知道页面是否被第三方篡改了。

  我们还可以把篡改过的html发到后台,找出字符串差异部分,让技术人员分析分析到底做了哪些手脚。

  当然,这只限于静态网页。

Lv5. 在返回网页的外链脚本里混入广告代码

  这招可算是终极篇 ———— 它完全不修改任何HTML内容!

  然而,一般的网页多多少少要外链几个js文件吧。于是,那些外链的脚本就成了香饽饽的肥肉被盯上了!

  当然也可以像验证html那样,事先计算出所有的js文件的hash值,然后再使用ajax重新读数据认证比对。

  不过可别忘了,外链js的路径可以是任意的,而ajax只能读取同源站点。而且,外链的