首页 > 经验技巧 > 关于刷票机的分析及应对

关于刷票机的分析及应对

2013年5月28日 5,344 浏览数 发表评论 阅读评论

  上面这张图是典型的刷票机工作记录表,从图上有两点发现:一是刷票机没有采用伪造HTTP头的办法突破IP限制(HTTP_X_FORWARDED_FOR中没有路由中转地址),估计是HTTP代理(IP没有规律);二是刷票机采用多线程高频率来发送数据,这样会造成IIS负载增大,以致无法响应其它用户的请求,所以在一小段时间里都是该刷票机的记录。

  刷票机之所以能如此疯狂地工作,前提是它要突破两道限制,一是验证码,二是IP地址。

  验证码是防机器最有效的手段,可我没有能力写出坚强的验证码,所以一直以来都在寻找免费开源产品。最先考虑使用Google的reCAPTCHA的验证码系统,但由于实在不易辨认以及“墙”的原因很多地方无法显示,而被迫放弃。后来又找到国内的“皕应HCaptcha”验证码,不知是由于免费版的缘故还是其它什么原因,该验证码仍然可以被破解。对此我没有办法,只能今后加强学习,弥补此处的不足。

  关于IP限制是一个地址只能投一票,据我所知目前有四种方式突破:

  1.修改HTTP头

  有些投票系统会先从HTTP_X_FORWARDED_FOR中获取IP地址,其实这是个危险的漏洞,因为HTTP头信息中的HTTP_X_FORWARDED_FOR是可以伪造的。我不知道网上那么多号称获取真正IP地址的代码,为何总是先从HTTP_X_FORWARDED_FOR上开始?要获取IP直接取REMOTE_ADDR就好了嘛。

  2.使用代理服务器

  这是最根本有效的办法,无论是HTTP代理还是socks代理,都可以轻易突破IP的限制。而我最初的想法是:哪来这么多的代理可用?但从淘宝上搜了一下“IP代理”后发现,不但有,而且量还很大,价格也很便宜。为刷票提供了极大的方便!

  3.利用ADSL重复拨号得到新IP

  这类刷票软件我见过,工作慢,效率低,一般都要找好几台机子一起工作。但同一IP段的数量有限,能刷出的票数也有限。

  4.IP欺骗

  网上有这种说法,可以伪造IP数据包与服务器完成三次握手后发送刷票数据。本人才疏学浅总是想不明白,伪造IP数据包是可行的,像DDOS那样,发送出去后不需要返回。而投票数据的发送是需要建立连接的,也就是三次握手一定要完成才可以。过程应该是这样:客户端向服务器发送一个请求(Syn),服务器收到后返回一个应答(Ack,Syn),客户端收到应答再向服务器发送验证(Ack+1),此时服务器收到验证后确定客户端合法,并与此建立了连接,客户端可以向服务器发送数据了。伪造的IP请求发出去后,服务器会将应答发送到伪造的客户端上啊?伪造的客户端收到应答后,检测没有发出请求信息会丢弃掉的哦。如何拦截这个应答,并且再返还一个Ack呢?搞不懂!如果抛去这些技术细节,单纯地想像为没有退回地址的信件寄出去那样,不管有没有收到,都不需要退回来了,或许能够理解得通!

  投票者的行为是多种多样的,完全依靠程序是不行的,我的做法是程序+人工值守,具体是这样的:

  程序上,做好如下工作:

  1.验证码时常改动;
  2.cookie和session限制可以轻易突破,所以相关代码都可删除,缩减逻辑判断过程,提高效率;
  3.尽量减少数据库查询操作,重要字段要使用索引;
  4.做好防重复提交的设置,比如不停按F5,后退再提交等;
  5.详细记录投票者行为,比如IP、参投的ID号、客户端的种类名称、提交时间等;
  6.做好参选项目的票数增长分析。比如一分钟时间里,每人都增加了几票,增长最快的是谁?每人的单独投票记录都可以调出来分析;
  7.做好处罚规则;
  8.无人值守时暂停投票(一般设定在夜里)。

  在验证码被突破,刷票机疯狂地即将把服务器刷死的时候,我想了一个简单粗暴的做法,根据普遍的票数增长情况,来确定一个时间点对全体票数进行取样,并且再取一个增长幅度数来进行对比。比如:每一分钟取样一次,如果票数增长50点,则认为是作弊(同时参考其它参数),将其加入黑名单,被封若干时间。这样可以对刷票者造成一定的心里压力,试想他疯狂地刷了几十票之后,被封了一天,会有怎样的感受?这些规则事先要在投票需知里注明,一旦发现被封,他们也能理解!

  此做法可能会“误伤”,但真得很有效!越是临近投票结束时越有效果。

  人工值守时,时常要观察票数增长情况,对票数增长过快的,要单独分析,有问题要及时处罚。像用重复拨号来刷票的,都可以轻易地分辨出来。

  对于IP欺骗我还没有弄明白,如果真像寄信的那样,不需要退回的话,我们可以在程序上这样限制:客户端提交过来数据后,服务端将投票数据和IP地址组合起来进行加密,并返还给用户确认,等用户确认后,跳转到另外一个页面,进行解密并比较两次的IP异同,最后再决定是否加票。(也可能是我理解错了!)

  年龄大了,精力有限,要学的东西总有很多,累!欢迎与我交流!呵呵~

分类: 经验技巧 标签: , ,
  1. 你好
    2013年6月27日17:06 | #1

    版主,你好方便加1343968335,我们讨论一下

  2. 你好
    2013年6月30日16:36 | #2

    版主你好,找不到你的联系方式,方便加1343968335吗?一起探讨皕应的问题,

  3. wuhuaguo
    2013年6月30日22:23 | #3

    加我QQ吧:22643917 @你好