网站投票防刷票验证码分析和实践

上传人:L** 文档编号:136884904 上传时间:2020-07-03 格式:DOCX 页数:10 大小:175.12KB
返回 下载 相关 举报
网站投票防刷票验证码分析和实践_第1页
第1页 / 共10页
网站投票防刷票验证码分析和实践_第2页
第2页 / 共10页
网站投票防刷票验证码分析和实践_第3页
第3页 / 共10页
网站投票防刷票验证码分析和实践_第4页
第4页 / 共10页
网站投票防刷票验证码分析和实践_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《网站投票防刷票验证码分析和实践》由会员分享,可在线阅读,更多相关《网站投票防刷票验证码分析和实践(10页珍藏版)》请在金锄头文库上搜索。

1、 网站投票防刷票验证码分析和实践 来源:八方刷票公司 http:/综述篇现如今,网站投票的方式被越来越多地用于各种评比活动中,互联网无疑为投票活动带来了极大的便捷,但是也由此产生了新的问题刷票、或者准确的说是机器刷票。回忆5、6年前各种选秀活动大量采用手机短信投票方式,从那时起刷票公司遍地开花,往后几年“圈钱”“骗钱”的手机短信方式逐渐减少,纯网站形式渐渐增多。也许就是从那时开始带热了刷票行业,到现在加上木马病毒灰色产业链的帮助,防刷票的技术门槛被大大的提高,刷票与防刷票已经演变为一场攻防较量。想必所有正儿八经的投票主办方都不愿意自己的网络投票被人通过技术手段任意地增加票数,但是HTTP技术使

2、然,想实现并采用比较有效的防刷票方式却又不是那么容易,或技术成本过高,或用户体验不佳。本文正是希望通过分析,例举和对比各种验证方法,探索一些较好的防刷票验证方式,既能方便的实现和部署,又不失对用户的友好。本文涉及的技术主要基于Linux、nginx、mysql、php-fastcgi构建的WEB平台(缩写为LNMP),包括gd库、curl库等,另外涉及的工具可能包括Firebug、Httpfox、Httpwatch、Fiddler、IE WebDeveloper。文章将依次列出各种常见的验证码形式,对其为何被攻破的原因作出一定的阐述,可能由于个人水平有限,分析不到位或不准确,欢迎拍砖。最后还得

3、注明一点,本文谈的主要是防机器刷票,对于靠人肉战术,以拼人数,拼体力的方式刷票就没有什么太好的解决办法了。分析篇该部分将对基本而常见的验证方式进行分析。1.Cookie方式。这是一种很老的验证方式,原理是通过在浏览器上用cookie来记录相关信息,如最后一次投票的时间或已投票次数,如果用户再次投票时检测到超过了限制,则提示用户不能投票。普通破解方式,可以通过浏览器的设置如IE的Internet选项,对cookie进行清空操作,而后cookie验证即宣告失败,一切计数从零开始。或者安装如Httpwatch、Fiddler、IE WebDeveloper等工具,这些工具中有按钮可以直接删除所有co

4、okie或某些cookie。程序破解方式,可以编写程序,对浏览器保存cookie的目录全部清空或部分删除。也可以使用如curl库,模拟浏览器访问,包括记录访问的cookie到某个文件中,而后在程序中清空或删除cookie文件即可。有的网站虽然采用了cookie方式验证,但是却不验证浏览器到底支不支持cookie,到底从cookie中有没有取到数据,只是判断有cookie验证数据如何做,没有则跳过,这样的话,直接禁用cookie就实现了破解。2.IP方式IP限制曾经是比较有效的一种验证方式,由于IP的稀缺性决定了想要获取大量IP是存在一定难度的,因此IP限制一直到现在都被广泛使用。IP限制通过记

5、录投票的IP地址、投票数量和时间来判断该IP用户是否超过投票限制,超过限制则不能投票。普通破解方式,没有太简便的普通方式破解IP限制,如果有一定耐力的话,可以在PC上操作拨号连接,超过投票限制就断开重新拨号,这样可以获取一定数量的不同IP,但也不是每次都不同,毕竟电信运营商局端的IP池也是有限的,靠人工如此操作,效率很低人也很疲劳。程序破解方式,可以使用一些拨号工具或代码,由程序来不断重复“拨号投票断开”的过程,但除了解放了人力外,能获取不同IP的数量仍然是比较有限的。有一些刷新软件中提供连接国内外代理服务器的方式,但是终究数量有限,而且访问国外代理服务器还存在连接困难,速度慢等问题。还有一种

6、程序破解方式,它的出现和使用让IP限制变的毫无作用。通过实际情况分析以及与刷票公司的沟通,推断和了解到刷票公司手中握有大量“肉鸡”,可以通过肉机进行投票操作,现在木马横行,肉机数量硕大,此种方式所能获取的IP可谓是海量的,IP限制面对此种方式完全失去了作用。3.表单验证串有的网页表单会以hidden形式保存一些随机的验证字符串,每次刷新表单这个值都会发生改变,提交表单时如果没有这个值或者值不符则提交失败。要破解这种表单需使用如Httpfox或Httpwatch分析提交表单时的具体数据,结合Firebug或IE WebDeveloper或直接查看网页源码,便可找出这一随机字符串的变量名和数值。编

7、程时可以使用不同的方法(方法很多,不在此赘述)获取表单所在页面的源码,通过如正则表达式等方式从中截取出这个数值。与此相同的道理,也可以把这个数值保存在session中,但只要刷票程序能按照HTTP协议规范模拟出正常的访问(如使用curl库),破解反倒更为容易。总之,表单验证串方式还是很容易破解的,只要对HTML代码有一定了解,具备一定的编程能力,此种验证方式也仅能是稍稍增加了一点点破解的门槛而已。4.图片验证码图片验证码在包括投票在内的很多网页表单中都可以见到,相对来说,此种方式对破解者的编程能力要求比较高,因此门槛也高一些。但是,此等验证对“君子”足以,对“小人”还是收效不足。常见的如数字验

8、证码,字母验证码,数字和字母混合的验证码,现在有的网站还使用了中文的图片验证码。图片验证码具体还有多种样式,有使用纯色的背景或使用多色背景的,有带干扰像素或不带干扰像素。早先开始的时候大都是纯色背景验证码,字母和数字之间的间隔固定不变,使用的颜色也相对单一,可能会带有一些噪点。对于这种形式的图片验证码,网上可以找到一些文章讲解如何破解,基本上是按固定宽度截图,所截字符图片与采样保存的字符图片进行像素比对识别,如果有噪点还需要去色去噪等。而后,图片验证码被进一步改进,可能包含下述的一种或多种形式。如背景被设置得更加复杂,颜色更多,并且每次刷新表单时背景也在不断地变化;又如数字字母会随机变换字体,

9、有粗有细,有大有小;还有就是可以让数字字母之间的间隔不固定,显示时对其角度有做出一定调整,使字符或左倾或右倾;再比如Discuz中那样,除了干扰曲线,还在背景中加入了浅色的干扰字符,值得借鉴。以上形式在PHP中使用GD库均可实现,原以为如此这般定能达到很好的效果,结果却不是这样。如果采用早期对单色定宽的图片验证码所使用的破解方法,将费时费力,而实际情况则是基本很短时间就能被刷票者破解,因此推断有一些成熟的功能强大的OCR识别工具或dll库等被加以利用,可能还辅以一定的图片去色去噪的处理功能,这样,图片验证码的识别概率和效率都被大大提高。当然,从实际的访问监控中发现,并不是每次刷新都能被正确识别

10、,因此刷票者往往还采用“暴力”的方式对网站进行访问。即使尝试5次或10次才能成功一次,配合上对网站近乎疯狂地发送HTTP请求,最终也足以达其快速增加票数的目的了,反正在总请求数数量巨大的前提下,也能保证最终成功数不小。还有一种形式的字母验证码,采用扭曲的方式来显示一组字母串,正如在谷歌google网站中经常见到的那种,对于防刷应该更加有效。但是,个人认为此种形式对广大的草根网民不够友好,可能很多人都无法正确地识别和输入,因此暂时就此一笔带过。同样,使用中文的图片验证码现在也屡见不鲜,但是却要求用户能够进行中文输入,不管是用拼音也好,五笔也好,还是用手写板,终归是增大了难度,用户体验不佳。最后附

11、带说一下,网上有人说可以用MAC地址限制,这基本是不可行的,首先MAC地址可以修改,更重要的是,MAC地址只能在一个局域网中广播,不能跨过路由,又如何能在与用户之间被若干路由相隔的网站上轻易获取用户MAC。不过也许等到某天,政府建立了“大局域网”之后,没准还真就可以让MAC地址在整个网络中传播,以匹其“大局域网”之名。实践篇1.投票处理程序须严谨投票处理程序应该先把好第一关,就是不给刷票者留下任何明显的漏洞。有经验的刷票者会由浅入深、从易到难地对可能存在的漏洞逐项进行侦测,有可被轻易攻击的漏洞存在,无疑可为刷票者带来极大地便利。很多程序的编写者,往往只会按照业务或产品要求的主逻辑编写代码,功能

12、是实现了,但是只要用户提交的请求略有不同或稍加修改,就可能绕到本不该进入的逻辑之中。也许有人要说这是测试人员的工作,但是网站能配备专职测试人员的怕是少之又少,因此,一方面既要实现主要逻辑,同时还要用缜密的心思周全考虑,查缺补漏完善代码,有一股子较真的精气神才不失为一名好的程序员。下面从严谨编码的角度提一些个人意见和建议。1)尽可能使用POST方式。常用的表单提交method有GET和POST方式,GET方式以明文参数带在链接后面传送,查看和识别相当容易,使用POST方式则需要借助专门工具才能查看到提交的内容。2)检测是否支持Cookie。这个功能其实挺常见,如果关闭了Cookie,在访问一些论

13、坛时会有相关提示,想必很多人都见过。检测Cookie的作用就是限制必须使用浏览器,或者编码HTTP请求和接收时需要处理头部的Cookie数据,又或者使用带Cookie支持的仿HTTP请求工具(如curl库)。3)检测参数是否正确。可以检测提交的变量的名称是否正确,变量的个数是否相符,还可以进一步检测变量的类型是否符合要求,数值是否超出范围等等,一旦有不符之处则终止程序。4)防范SQL注入。结合上一点来说,在对参数进行检测时,用相关函数处理变量,尤其是字符型变量,以防范SQL注入。虽说在投票处理程序中实用性可能不高,但是作为网络编程安全常常提起的重点,此处也不得不说一下。以PHP为例,常用的函数

14、有addslashes()、 mysql_real_escape_string()、mysql_escape_string()。5)HTTP头部检测。可用来检测的HTTP头部信息主要有HTTP_REFERER、HTTP_USER_AGENT、X-Forwarded-For。HTTP_REFERER信息表示用户请求当前页面的来源页面地址,就是说在来源页面操作之后才来到当前页面。可以对该信息的内容做检测,比如检测来源网址是否是本站地址,不是程序则做相应处理。HTTP_USER_AGENT表示了用户所使用的客户端是什么,一般内容是各种浏览器的UA信息。可以检测当不是有效的浏览器数据时,程序做相应处理

15、。X-Forwarded-For包含了所谓的真实用户IP,意思是用户通过透明代理访问,代理服务器会把用户的真实IP保存在这个信息里,一般从WEB服务器日志中可以看到这个数据保存在每行日志的最后。网上有不少获取用户IP的示例程序,先从X-Forwarded-For头中取值,没有再从REMOTE_ADDR中取值,以确保获取最真实的用户IP,这个对网站来说可行,对投票来说并不可取,不应该在投票程序中使用X-Forwarded-For头获取用户IP地址。X-Forwarded-For是可以被模拟发送请求的,如果按此法取IP值,则投票程序的IP限制直接失效。个人建议,应该在投票程序中对包含X-Forwa

16、rded-For信息的HTTP请求采取诸如终止程序的措施。6)表单重复刷新需处理。一般,WEB表单提交后点浏览器的后退按钮,会出现是否重新发送表单数据的提示框,如果投票程序未对此做处理,只需要后退刷新,再后退再刷新,则可实现刷票,相应的工具可以采用如屏幕按键精灵等来自动模拟鼠标点击。7)最后一点,有if就一定有else。这一条要求编程者逻辑的严谨,意思是条件判断语句 if/elseif/else 要能完整覆盖同类条件下的不同状态或数值区间。举个例子,曾今碰到过一个投票程序,通过浏览器投票时,进行了Cookie验证,当然每次清除Cookie可破,改用curl库请求,却发现无需开启Cookie支持即可直接提交投票请求。这说明,程序很可能只写了一个if来检测有Cookie数值时提示超过投票次数限制,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号