逍遥游

12306推出图片验证码,失败的尝试?

12306官网向来是大家的槽点所在,这不,前几天12306推出的类似连连看的图片验证码又成为众矢之的。

怀着好奇的态度,我亲自去试了一下。先来看看这次的验证码要求,要求从下列的图片中选出所有的,而可能对应不止一张图片,这一点又坑了不少人。

看看这个,你能看出来是让你选什么么?(原图就这么大。。。)
12306-captcha

对于此次的图片验证码,大家讨论的很火热,去看了一些文章评论,跟我预料的相差无几。

从用户体验上来说,有网友大骂不好选,各种不认识的东西,笑称让自己长了不少见识。的确,新版验证码几乎是要蒙成功的。

而从破解的技术难度上看,很多人表示不难,大家提出了各种破解办法:

1、 调用百度识图、谷歌识图api。
现有的技术的确可以达到一定的识别率,但是准确度还不高。而且调用外部api需要消耗大量的带宽,还有就是这些api难保不会做出对应的屏蔽。

2、 图片数量有限,全部抓回来一张一张人工识别后将MD5放到数据库。
存图片的想法很好,但是如果每张照片都在加载时随机加入了干扰点呢?好吧,就算你能降噪,但是我想也很难去掉所有的噪点,并且恢复原图吧?你又说了,不存MD5,存特征,用相似度来识别。好吧,我输了,您花费大量的带宽、存储、服务器来提供抢票业务,也是蛮拼的。

3、 另外,还有一位网友说,让客户端脚本逆向哈希,真是眼睛一亮啊,我也是这么想的。但是突然意识到,网上好像有人专门在弄MD5的数据库(打表!!!我也是醉了),直接查询就行。这个办法考虑到了MD5的不可逆性,方向是对的,但是没有料到这种情况。

所以,这次的图片验证码对于机器来说,识别上也是有难度的。

于是我想问了,人和机器都难以识别的验证码,意义何在?

还有人调侃说这是12306为了试水广告。的确,如果全部换成广告图片,凭借12306这么大的访问量,一定可以获得高额的广告收益。但是,我认为不会变成广告。一方面,12306作为一种政府官方网站,投放广告是不合适的吧,而且也没有先例。再有,12306不会为了赚点广告费自己写一个广告系统,肯定会用现成的,那就只有百度、阿里妈妈了,这两个联盟的广告质量和内容相信大家都是知道的,估计铁道部也不愿意让自己这么尴尬吧。换用图片验证码,完全是为了加大第三方插件抢票的难度。

总的来说,不是很看好这次的图片验证码,但是它又不失为12306的一次大胆尝试,不能说它现在做的不够好,就去骂,毕竟铁道部也在努力。摸索的过程中总会遇到各种各样的问题,况且12306是一个特殊的网站,它在国人的生活中是不可或缺的,所以它的一举一动都会受到人民的监督,压力也是很大的。

很多人不满,说春运的时候不推出新的验证码,等到春运结束了,不需要抢票时推出新版验证码。其实这种做法是毋庸置疑的,改版怎么能在繁忙的时候进行呢?春节时铁路的吞吐量那么大,万一改版的时候出现未知的错误,影响购票,那岂不是要被唾沫星子淹死?春运结束后,访问量不那么大了,上线新功能,这样可以有比较充分的时间来调试。另一方面,用户熟悉了以前的验证方式,突然换掉,一定会给春节期间买票的用户带来不便。

再说12306这次的改版吧,我觉得一定程度上达到了预期的目的,很多第三方抢票软件失效,但是带来的坏处却是更大的,那就是这种验证码真人做起来也不是那么容易的,一个连人也无法解决的验证码,又何来验证之说?如果说,12306官网的出现把广大农民工朋友清出了抢票大军,那么这次的图片验证码则是连我们这些知识有限的“文化人”也要被剔除出去了,那么公平何在?如果铁道部不能改进这一验证码,那么它一定会在不久后退出12306的舞台。毕竟,这是一个鸡肋的东西。

相信每个网民都烦透了验证码,每次都是一边瞪大眼睛识别验证码一边在心里骂着。验证码的出现本身是为了辨别机器人与真人,真人是不应该为这一方式受到影响的。可现在的情况是背离了这一初衷,一味地提高识别难度,人也没法识别了,甚至某些情况下,机器的识别率更高。我曾经也在考虑过一些新的验证形式,可以既不让人感觉到麻烦,又能有效的防止机器人。

1、 电脑的优势之一是快,那么可以从这一点上去考虑,让客户端去处理一些用时较长(1-5s)的问题,比如逆向MD5,但是上面也说了,有人打表,那就没办法了。

2、 再一个我看过的方式就是让用户做一些拖动、点击等调用js的操作,也就是像12306的这种。但是计算机的信息都是以二进制存储的,js事件也不例外,计算机模拟一下也不是很难吧。

3、限制ip访问频率。其实12306是存在这一设置的。这次测试的时候大概刷了100多下吧,然后就被服务器拒绝访问了,返回如下代码:

1
{"validateMessagesShowId":"_validatorMessage","status":false,"httpstatus":200,"messages":["网络繁忙"],"validateMessages":{}}

照理说这方式有用,但是为什么还是防不了第三方插件呢?首先咱们不说伪造ip的问题,就限制ip访问频率的方式来说,防一般的黄牛是够的,但是拿某些唯利是图的企业就没办法了,要知道他们掌握了大量的ip啊。不知道ip的分配上是不是也符合二八原则呢?

3、 短信验证码。没试过,用不起,感觉应该是挺靠谱的,但是网上说也不行,不知道为什么。

4、 在看帖的时候,有一个网友的发言让我很受启发,他说机器和人的区别在于,机器快而人慢,可以限制提交的间隔,比如登录界面5s后才能发起登录请求。这样的话,即使第三方可以识别验证码提交请求,但是也被限制在和人一样的速度上,没有什么优势可言。但是,这一招只能解决在线抢票的公平性,离线抢票还是不能根治。原因还是在于他们有很多的ip、很多的服务器。。。

其实,我一直不明白的一点是,这些第三方插件明显是扰乱社会公平的,为什么没有人去禁止?就因为他们是大公司,每年交的钱多?

就12306来说,无论用什么样的技术也无法彻底解决抢票难的问题,根治的唯一办法就是合理安排、加大运力,保证每一个需要出行的用户都能买到票。如果不需要为了票而担心,黄牛哪还有生存空间啊?


多说停止服务,disqus引导注册太过分,暂时不上评论系统了。有机会自己造轮子吧。邮箱:input@newnius.com