怎么防止网站流量被盗取

海外服务器 (549) 2015-10-31 13:15:17

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

 

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

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

防范措施:

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

 

Lv2. 在返回网页里插入外链<script>

这种做法相比之前的,要隐蔽的多,至少不会把人家网页的源文件给替换了。

当然,如果仅仅是在网页的最后面插入<script>,那还是能被瞬间揭穿,甚至会报毒,因为这太山寨了!有哪个正常的网页会在</html>后面跟内容呢?只有挂马的脚本。
不过,要是放对地方,还真不能一眼看出。例如把广告的<script src="">插在<head></head>其中的密密麻麻引用外部js的地方,至少能混上一段时间了。

 

怎么防止网站流量被盗取

 

防范措施:

一般来说,插入的<script>大多都是外链形式的,这样广告变换会比较灵活。对于这种劫持,就要使用类似杀毒软件扫描可疑模块的原理。

广告不管怎样插,最终都会以静态HTML留在网页里,这是不容抹去铁证!

当我们的网页HTML加载完毕,触发DOMContentLoaded时,我们可以开始扫描一遍DOM内所有的<script>标签。如果发现有不在信任列表里的src,那么网页很有可能被注入了可疑的脚本!

我们可以提交可疑脚本的url到后台服务器,做进一步认证。如果确实有风险,那么必须弹出警告框提醒用户。

 

Lv3. 在返回网页里插入内置<script>

相比外链的脚本,内置的就棘手的多。外链的url域名的总是那么几个,可以简单的实现过滤。但内置脚本就千变万化了!随机变量名,插入废代码,各种玄乎。不过,魔高一尺,道高一丈~

防范措施:

想最简单的对付这种劫持,我们必须预先默认个规定,来识别真假脚本元素。我们给自己的<script>元素设置个固定的标签,例如<script myjs="true">。当然具体的标签名和值是经常变动的,对于劫持程序来说,显然不知道会有这么个规矩,仍然傻乎乎的插入<script>...</script>。

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

 

Lv4. 在返回网页的<script>里混入广告代码

随着劫持程序不断升级,招数会变的越来越狠。说不定某天,劫持程序内置一个html语义分析器,智能的把广告脚本合并混淆到页面原先的js里!

若要真是这样,那么之前说的给自己的脚本元素加上特征码也无济于事了。因为特务已深深的混入到了我们内部,真真假假很难被识别!

最致命的是,脚本未必都是放在<script></script>,也有可能是<element onxxx="">的内联形式。这下麻烦大了,我得想想怎么解决。

防范措施:

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

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

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

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

 

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

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

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

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

不过可别忘了,外链js的路径可以是任意的,而ajax只能读取同源站点。而且,外链的<script>也无法读取其text内容。于是当我们使用站点外的js文件时,劫持程序可以肆无忌惮的从中混入代码!

防范措施:

由于受到沙箱策略的严格控制,我们根本无法获得外部js内的实际内容,所以:走为上。尽量不使用外部站点的js文件。

对于自己站点,但不是同个域名的,可以使用Flash的URLLoader跨域加载,只需部署一个crossdomain.xml即可。

 

Lv6. 把返回网页的图片内容替换成广告图片

这样的流量劫持已经超越人类了,赶紧派一个神做了它吧。。。

防范措施:

理论上,完全可以解决。事实上,也没问题,只是工作量巨大。

不过外链图片不管同源还是跨域的,都可以由Flash直接读取,所以可以和html和js一样,我们使用文件二进制的Hash比对,同样可以验证图片数据是否被劫持。

当然要事先要计算出站点下或外链图片的hash值,客户端也要分析出当前页面里用到的图片,并逐个验证。

大家有什么巧妙的检测方法,欢迎留言~

上面说了一大堆,其本质无法就是在客户端,把使用到的资源和服务器原始资源二进制校验,将出现问题的资源反馈给后台记录,找出安全隐患。

虽然这里假象嵌入的仅仅是广告脚本,然而这种脚本拥有和页面内其他脚本一样的权限,因此可以轻而易举的获得用户的cookie。

嵌入的脚本甚至可以通过WebSocket连接到黑客控制台,发送你的鼠标和键盘的一举一动,以及页面上显示的内容;对方还可以远程控制,让js在页面里悄悄执行各种意想不到的操作。

THE END