关于刷票机的分析及应对
上面这张图是典型的刷票机工作记录表,从图上有两点发现:一是刷票机没有采用伪造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异同,最后再决定是否加票。(也可能是我理解错了!)
年龄大了,精力有限,要学的东西总有很多,累!欢迎与我交流!呵呵~
原创文章如转载,请注明:转载自无花果的原创博客 [ http://wuhuaguo.lifeskillcn.com ]
版主,你好方便加1343968335,我们讨论一下
版主你好,找不到你的联系方式,方便加1343968335吗?一起探讨皕应的问题,
加我QQ吧:22643917 @你好