月度归档:2012年01月

见识了电信流氓插iframe+分析解决方案

这两天回了家从感觉浏览器行为有些怪异,有些熟悉的网页无故出现了额外的竖直滚动条,有时候是两个,有时候甚至到了3个!我是用的是chrome浏览器,像现在wp后台添加文章的页面就是有3个竖直滚动条的。

首先毫无疑问wp后台是使用的iframe的结构,我们来把滚动条拉到末端,发现页面底部无故多出大片空白。最里边的滚动条拉到底部是正常的wp的最底部,另外两个滚动条到底部之后呈现的空白块又是什么呢?通过chrome右键的审查元素我们发现,我们的页面被嵌入了一个iframe之中,而正因为文章编辑这个页面本身有一层iframe(src:post-new.php),这里被挂了一次iframe,加上wp后台边栏这一层又被加了一次iframe,所以出现了3个滚动条。

进一步深入观察发现,被流氓过的页面大概呈现这样的结构<html><body><iframe><iframe><script></body></html>,其中第一个iframe的src正是你真正要访问的那个页面的地址,而第二个iframe的src是空白页,而重点就在于后面的js。完整的劫持页面模板可以看这里电信流氓(这是以虾米网为样本的,换成其他的网站只会变第一个iframe的src)。

通过我水水的前端水平,起码我可以看出:第一,这个js请求了某“logo.jpg”(不要被这寻常的名字和后缀名骗到了,后面给他传参数呢),并放在了第二个iframe中(也就是src是空白页的那个)。第二,在请求logo.jpg的时候传递了一些参数,分别是navigator.appMinorVersion(浏览器次级版本),screen.availHeight/Width(浏览器用户区高度宽度),screen.height/width(分辨率高度宽度),screen.colorDepth(屏幕色深)。剩余的代码有一部分是为了对这种iframe劫持做出的修正,包括form和连接的target为空时的修正,剩下的看不懂了。

从请求前面的这串http://202.105.165.211:4022/logo.jpg?p=,我们得到一个ip,经查这是中国电信的ip,而且是我所在地的地方电信,那么我就想问一句电信你想干嘛呢?收集用户数据?另外我联系到了电信另外一个很2b的东西叫做绿色上网。绿色上网可能是个好事但是能做成这么2b的我还第一次见,我也不知道为什么w3cschool你也要说是不良网页然后就跳转屏蔽了。

而且跳转到的这个页面的ip地址202.115.165.218和上面logo.jpg所在的202.105.165.211明显是一伙的哦。而且有一个很2b的证据是,这些被绿色上网拦截的页面都是载入到差不多才跳转的哦(不像撞墙那样子直接就挂了),所以综合判断这段js加载的logo.jpg应该和绿色上网有着莫大的关系,这样一说好像这货就正义了很多似的,“先加载判断是不良网页才屏蔽哦亲”,这个做法貌似比墙要人性化一些只不过手段比较拙劣,但是你怎么解释你收集我的显示器/浏览器的信息?莫非浏览器版本低或者屏幕太大了也算是不良网页的评判标准?我现在姑且把你定义为绿色上网的同时顺手牵羊收集用户的数据。

另外这个被插iframe造成的额外竖直滚动条的现象在页面刷新之后会消失,这个也符合绿色上网检测的要求。这个做法在外观上还导致了第一次网页加载时页面title无法正常显示(至少chrome下是这样),因为劫持后页面没有head区更加没有title段。那么对于这个这么流氓的东西我们该怎么办呢?

第一,我们让我们的网页跳出电信的iframe,其实就一句js就搞定,可以搜搜“防止 被iframe”,理论上设计上不需要被iframe的页面都应该加上一句跳出iframe的js以防止别人使用iframe非法引用你的页面。核心其实就是一句if (window.top != window.self) {window.top.location = window.self.location;}

第二,如果是绿色上网的问题,找电信去,表示你的强烈不满和严正干涉,这项业务应该是可以关的,当然了,也听说有很多人并不是绿色上网的问题也被电信插了iframe弹广告/劫持不存在域名跳转114之类的,搜索“流氓电信 logo.jpg”或者电信dns劫持之类的关键词立得。

新年就要到了没想到还有一件这么蛋疼的事情可以让我吐槽,阿黎在这里祝大家新年快乐撒~

#暨大离线# windows平台下面的静态文件web服务器选型

今天下午和晚上在做暨大离线的一些准备,主要测试了一些东西

离线下载,顾名思义你离线,服务器帮你下载,那么服务器下完之后还得给你传,这里采用什么传输方式呢?

一开始我有考虑使用ftp,但是发现相比起http下载,ftp还有很多人不会用,如果这个局域网过程仍然采用http下载,对于用户来说会不会比较无痛呢?

于是我开始测试服务器用的web服务器软件,服务器这边目前是win2k3环境(至于为什么,后面文章再有详细介绍)。

这个服务器承担让用户取回要下载的文件的这么一个角色,只需要对静态文件提供http下载即可,不需要脚本支持。

Nginx在windows——杯具!

一开始我测试了windows版本的nginx,nginx在linux上面是个很不错的服务器软件,有低资源占用,抗并发能力好等特点。但是到了windows平台上就坑爹啊~~这一点你还不能怪nginx的开发者,实际上C语言可以为Windows平台编写软件,linux也没有例外。程序本身的逻辑应该是跨平台的,而在具体与系统打交道(调用系统api)的时候才有差异,这个差异有很多方面,包括内存管理、进程管理、文件系统、网络控制等方面。而一个优秀的开源服务器软件,nginx,在windows下,是在这次测试中表现最渣的一个。对于同一个普通二进制静态文件,局域网内客户端开5线程下载平均速度在1mb/s左右,峰值可以达到1.5mb/s,速度很不稳定。

Apache在windows——仍旧杯具!

第二我测试了Apache,Apache作为市场占有率第一的服务器软件,在windows平台上也有比较完善的版本。我是从官方网站下载的2.2stable版安装的,还是跟上面一样的那个文件,一样的客户端一样的5线程,下载平均速度1.3mb/s,峰值能到1.5mb/s。速度比较稳定,不过Apache的个东西,性能不会是最好的,apache和nginx最大的不同是,apache使用了每个请求一个线程的阻塞I/O模型,nginx使用了单线程的非阻塞I/O模型,关于apache和nginx之间的讨论还有很多,我比较偏向于把apache和nginx组合来使用(明显是说在linux平台上),这样他们两个可以互相取长补短。

IIS不用说肯定是在windows——居然能跑这么快!坑爹啊

最后我尝试了IIS,IIS的配置过程看起来非常轻松方便。测试同一个文件,额,什么情况!这win2k3上面的iis6,居然让客户端的下载速度平均值达到了2mb/s,峰值能到2.3mb/s。搜了一下网上很多人都有说这个问题,在微软的windows上面就他自家的iis跑得最快了,别的都是渣渣。

就这样这个web服务器软件就暂时选定了IIS吧,是那个我之前相当鄙视的IIS,总的来说其实是自己对于IIS没有很多的认知。IIS怎么说市场份额也是排在第二的(Apache比它大几倍的稳居榜首),另外有一点,国内很多入门级虚拟主机都是windows+IIS+ISAPI来支持PHP的,他们也不会在windows上面弄apache,这一点也能说明一些问题。当然了,这是一片神奇的土地,国外又完全不是这么回事了,国外一般人不会用Windows做服务器的操作系统(是服务器不是pc),包括费用等方面的考虑(我觉得更大的原因是——用不着)。

 

天天动听安卓版皮肤解包工具云端版

这次发布的是天天动听安卓版皮肤解包工具的云端版,部署于新浪云计算。

继续开源,代码丑陋还望指正。传送门index.php

上传皮肤文件,云端完成解包和zip重打包,弹出下载。

这次的coding让我学习了两个很好用的php函数,pack和unpack,用于操作二进制字符串到变量之间的互转。

同时做这个东西也让我见识到一个PclZip的类库,在php没有zip支持下直接实现zip包操作(代码很长,5k行)。

=======================题外==========================

之前发过这个东西 天天动听安卓版皮肤打包工具分析+自制解包工具放出,当时这个工具是用易语言写的,易语言做的程序误杀报毒的问题,不是一天两天了。易语言作为国人开发的一款中文编程语言,我是挺支持的,挺喜欢的,也算是用了几年,写写小工具之类的小开发效率很高。

由于报毒和其他各种原因,易语言杯具的说,一直告诉自己不能依赖工具,特别是易语言。一开始我发现天天皮肤打包工具(官方放出的)很小(6KB),是C#弄的吧。于是我也想用C#反过来写一个解包工具,不过……我还没学过C#,上学期末选课的时候C#和Java二选一,我毫不犹豫选了Java。而C#的代码,我只是能看懂一些,会查手册,就这水平。(ps:有一天建阳篮球场旧书义卖三折,我逛了计算机类的,发现厚的就只有一本C#3.0自学宝典,原价68,有光盘还很新,我就花了20块买下来了,不过一直没翻过,我现在和可预见的将来我都觉得没必要翻)

vs2010早早装在了我的电脑,很大很大,安装的光盘镜像就2.5G,一直没用它来做过什么项目,倒是用它来看过很多别人的小项目。后来习惯了notepad++之后,这种文本类的代码文件我一般都用notepad++打开和编辑(有时也会淡定的直接用记事本)。那天在易语言实现了解包函数过后,想尝试用C#来做,一开始感觉还很不错的,自动完成和代码提示感觉很好。自动完成就连句中的空格字符都帮你调好了,而代码提示直接很方便的看到一个对象支持哪些操作。我那天就经常是在对象名之后按下.然后慢慢翻看代码提示的列表,找出适合用的函数。不过可能是因为不熟悉吧,后来我放弃了,疼痛点是类型转换问题,甚是纠结。

今天在用php写这个代码的时候,感觉php弱类型爽多了,而且php里面二进制资源可以很安全的放在一个字符串里面进行操作,这点是我之前不知道的(php嘛,我也没怎么学过,看过一点书,维护过一些代码)。很灵活很灵活,配合pack和unpack两个函数可以从二进制字符串中获取和转换内容,也可以生成二进制资源进行进一步处理(如联系文件、其他持久化存储)