首页 > 其他 > 详细

如何从技术上预防抢票软件刷屏

时间:2015-05-03 17:12:18      阅读:337      评论:0      收藏:0      [点我收藏+]

      对于很多外地的朋友来说,没到逢年过节,买张回家的火车票都是一件让人头疼的事。12306网站一到那个时候就会变得其慢无比,要多次登录才能成功,而且等到登录系统之后,回家的票很可能已经被抢光。大家只得花高价从票贩子手中购票。而票贩子之所以能顺利的买到票,是因为他们手中有各种高级抢票软件,有的甚至能在几秒之内抢光一节车厢的所有车票。12306网站想过很多方法来防止抢票软件抢票,如让验证码不断闪动,甚至让用户从图片中寻找指定的物品,但用不了几天,都被破解。那有没有办法能从技术上防止抢票软件抢票呢(在假定售票部门没有内鬼的情况下)?今天我就来聊一下我的一些看法。

     俗话说的好,知己知彼百战不殆。要想战胜对手首先要了解对手,咱们首先来看一下各种抢票神器的实现原理。抢票软件的实现方法大致有两种,第一种是通过调用浏览器内部接口来模拟数据录入与按钮点击等活动,对于IE来说,调用的是MSHTML库。使用这种方法的好处是实现相对比较简单。缺点是执行效率不高,每次都需要网页加载完成后才能做下一步的操作,而且容易受到客户端脚本的影响,如果输入的内容不多,未必会比人工节省多少时间,而且不能在一台电脑上执行多个抢票任务。目前一些浏览器自带的抢票软件就是使用了这种机制。还有一种方法是直接通过程序调用网站的Get和Post操作来实现自动话抢票,这种方法的执行速度非常快,有些中间的页面甚至不需要打开就可以实现抢票,而且还可以在一台电脑上同时运行多组抢票任务,票贩子们手中的高级抢票软件大概就是使用了这种方法。对于这两种方法都涉及到验证码识别的问题,目前的OCR技术发展的已经非常成熟,有很多OCR软件在训练后都能达到很高的识别率,设置有些网站还提供了云识别的功能,从图片中找物品这个验证码,据说就是抢票软件的开发人员,使用了其它平台的云识别技术破解的。

     从抢票软件的实现技术来看,预防第二种方法是最困难的,如果能防住第二种方法,防住第一种方法基本就不在话下。那我们接下来就针对第二种抢票技术来谈谈如何防止抢票软件抢票。还有一件要说的事是,预防抢票软件的同时很可能也会给用户的正常购票造成一些不便的地方,而一票难求一般发生在节假日,所以这些策略没有必要在平时用,只在节假日的时候使用就可以了。

    第一个比较容易想到的方法是限制一个IP在一天内的购票数。但是抢票软件可以使用特别的技术伪装自己的IP,或不断变换IP。而且咱们国家的IP地址也不是固定的,这样也容易误伤其它想要购票的人。所以这种方法不可行。

    第二种方法是将验证码发到邮箱。这样做的好处是不用在担心验证码被OCR识别了,但如果直接使用这个方法也不行,因为票贩子可以利用软件自动接收邮箱的邮件,就算是公共的邮箱如163,新浪也可以实现邮件自动接收功能。这种组件网上有很多,主要是利用了Pop3协议,大家有兴趣的可以自己去找一下。在该方法的基础上可以稍微增加一些改进,就是不立即发送验证码,而是在一个时间范围内随机发送,如10-20分钟之内,可以在这个时间段内的任何一个时间点发送。这样可以有效的降低抢票软件的速度优势,因为即便是你比别人提前了1-2分钟左右,你也并不能保证你的验证码会比别人先到,这样会显著的降低抢票软件的抢票成功率。这个方法看似很成功,但还是有一些漏洞。票贩子可以注册大量帐号来抢票,比如要买10张票,他们可以注册100个帐号甚至1000个帐号买票,那样,结合抢票软件固有的一些性能优势(就算验证码是在一个时间段内随机发送,那样先提交的请求,更早接收到验证码的概率也要更大一些),他们还是很有可能抢到需要的票数的,甚至还会有盈余。当12306显示这个车次的票已经售完时,实际也不会有多少人再关注这个车次的剩票情况了。因为节假日车票很紧俏,买的人一般都会在这个车次刚开始卖的时候就来预定车票,而车票显示卖光以后,虽然有时会有退票,但这种几率很小,而且什么时候发生也有很大的不确定性,所以关注这个车次的意义不是很大。在车票售完几天后,票贩子可以选择某个时间点,退票然后再用抢票软件抢回来,虽然有了退票的成本,但在火车票紧俏的时候,将这些成本转嫁出去也不难。针对这种情况12306其实还是可以做一些改进,1、取消网上退票功能,必须本人携带身份证去火车站退票;2、退票不立即放出,而是在退票完成后一段时间后(如12小时)向外放票;3、增加一个关注车次的功能,向所有关注这个车次的用户发送邮件或短信提醒。那如果票贩子在火车快要开的时候退票呢?那就干脆不允许!其实个人感觉在火车出发5天前停止退票比较好,也给其它要买票的人一个选择的时间。不过这种方法其实还是不太完美,对于等待退票的人更向是一种赌博,如果在火车出发前5天他们还是没有买到票,那可能他们连从票贩子那买票的机会的没有了。

     现在开始说第三种方法。票贩子之所以可以用抢票软件抢票,是因为他们的软件有速度优势,即使使用第2种方法,只要他们先提交请求,抢到的几率还是比手工要大一些。那如果不需要抢票呢?我觉得一种更好的方法是在车票开卖前开始预约,开卖后以一种类似抽奖的方法随机选择购票者。这样抢票软件的优势会彻底消失。那如果票贩子注册大量帐号抢票呢?比如直接注册1000个帐号抢票,然后再退,让真正需要票的人买。那系统干脆可以增加一个追票功能(有点向追剧),如果发生退票,就从那些追票的人中随机选出一个人购买车票。当然这样如果一个人要买多张车票的话,很可能只能买到部分的票,或者就算多张都买到了,也有可能没有坐到一起,不过那也总比没有强!更进一步来说,可以增加设置让用户自己选择,座位是否必须在一起,票数是否必须买足等。使用这种方法,抢票神器基本上都废了。但要做好,系统还是应该提供一个买票规划功能,让用户提前设置好自己买票的条件,比如要购买的几组车次,是否必须邻座,是否必须在一个车次买足够票数等。让用户批量的提交自己的请求,当买票成功后为用户发送邮件或短信提醒,让用户登录网站付款,就算买票失败也发送邮件或短信告知用户当前的进度,如第1足组抢票计划已失败等,票以售完。这样做的结果不但方便了用户的购票,而且也减少了网站的压力,用户不需要不断刷新12306看购票的进度,只要登录自己的邮箱就可以了,可以说是一个双赢的结果!

     使用了第3种方法,基本上封住了技术上抢票的可能,但也有一个缺点,就是信息不透明,就像彩票一样,你不知道到底有没有人中奖。如果没用这种方法,抢不到票的人会觉得自己没有抢票神器,所以速度比较慢,火车票刚开卖2秒就光,都是抢票软件抢的。那如果使用了这种方法呢,你可能并不知道到底是因为订票的人太多,还是铁道公司内部的人把票卖给票贩子了。但话又说回来了,如果真有内鬼,你使用原来的方法就有用?票还没卖呢,就到票贩子手中你会知道?本文的前提是没有内鬼,如果真的有,那无论使用什么技术手段都是无法防住的!

如何从技术上预防抢票软件刷屏

原文:http://www.cnblogs.com/SunXianChun/p/4474128.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!