?
在Web开发中,投票模块会经常出现的,这样就使得防止刷票(Iteye上博客浏览次数就没有进行控制,记得以前模仿iteye做了一个博客论坛系统解决了这个问题,当时还是很兴奋的),成为了很重要的技术,下面来介绍几种防止刷票的方式:
?
1、IP限制
????? 这个应该是使用最多也是最广泛的方式,该方式主要是通过获取访问用户的IP地址,来限制其在一段时间内所能使用的票数。当然,经常用电脑的老手是很容易绕出这种限制的。
?????????? ADSL用户,可以通过断线重拨来更换IP地址;
?????????? 使用代理访问的用户,我们也无法获取其真实的IP地址;
?????????? 还有一些网上恶心的刷票工具等;
?
2、Cookies验证
????? 这种方式用的也比较多,但是我们都知道客户端的信息和内容都是不可靠的,随便一个熟悉web的人了解Cookies,就可以很容易的绕过这种限制了
?????????? Cookie可以禁用;
?????????? 使用代理访问的用户,我们也无法回去其真实的IP地址;
?????????? Cookie可以随意修改,甚至是删除;
?
3、Session验证
????? 我们知道Session可以给每一个访问的用户一个唯一的SessionID,大家不要看到唯一就兴奋,认为此种方式ok,无缺点,大家别忘了Session的致命缺点,在学JSP的内置对象的时候我们知道我们应该知道Session的生命周期。呵呵,晓得了吧。
?????????? 关闭浏览器,Session就会被销毁;
?????????? 客户端禁用Cookie,Session也会失效;
?
4、验证码
在做的比较好的网站上,大家可以看到用户的注册、登录、回复、发帖等等,都会使用验证码,但是这种方式会让用户有时感觉很恶心,程序员讲究的是怎么方便怎么来,但是,,而且发帖频繁的访问验证码,也加大了服务器负担。
有种验证码貌似可行,google推出的图形验证码旨在让用户将图片翻转至正确的方向,方可完成验证。图形验证码程序一般是几个歪歪斜斜、弯曲的字面和数字,人类可以很轻松地辨认出来,但对于机器却无法做到,所以很少有软件或者电脑操作可以很好的绕过这样的验证码。不过,缺点呢,实现难度很高(google弄的玩意就是很牛叉)。
?
5、MAC地址限制
大家知道一个主机会有一个IP地址,而每个网络位置会有一个专属于它的MAC位址。所以我们也可以根据MAC地址作为限制,但是这个地址我没获取过,据说不是很好获取,而且就算读取到,其读取的也是存储于注册表的一个信息,它也是可以进行修改的。
?
6、用户模块
这应该算很有用的方式。每个游客,必须注册了账户才能进行投票,通过限制账户ID来限制投票,并且可以限制初始注册用户,一段时间内不能参与投票。而且,真有大量的注册用户涌入,也可以增加网站的流量。可是,对于小地区网站来说,这样会让网友觉得很麻烦,可能放弃投票,从而可能流失网站的用户。
?
7、行为记录
其实,很多刷票行为我们是没办法进行限制的。可是有时候,我们却可以很好的记录下来。而且当检测到非正常投票的时候,自动提出票数,要么返回投票成功的假象,也可以很好的限制刷票。
缺点就是,记录过多的数据,会让服务器压力很大。而且,如果记录行为的记录点不够多,不够复杂,也可能被刷票的专业户所参透。
?
8、回答问题
第一次使用这个方式限制刷票的时候,我们很欣慰的看到了不错的效果。可惜,如果没有足够海量的题库,很快问题的内容和答案就会被收集。反而让正常投票的用户,觉得投票很恶心、麻烦,产生厌恶心理。渐渐的也被我们抛弃了。
?
9、随机投票地址
这个方法, 让每一个访问页面的用户得到一个随机唯一的KEY,通过这个KEY,生成一个投票地址,该地址只能访问一次,使用过后便作废。
?
不过需要注意指定的KEY的内容需要足够的唯一,而且不要让高手轻易看出规律;
?
10、填写信息
投票时,让游客填写身份证,姓名,手机号码等可以表示一个人身份的信息,来进行唯一性验证。不过,身份证你知道格式,姓名随便填,手机号码随便填写,也是没办法限制的。反而让正常投票的人觉得麻烦。
?
11、投票码/排号系统
投票前,用户都需要在其他页面/邮箱先获取到一个唯一投票的编码/卷,使用一次作废。不过,如何验证‘人’的唯一呢,如果有用户,他的邮箱足够多,是不是就可以无限获取投票码呢。
对!所以,这也只是治标不治本的方法了。不过,至少,这个方式也会让刷票的人觉得很麻烦。但是同时,也会让正常投票的人觉得不方便。不过,能够让刷票党,刷得不是那么痛快,也算是有用了。
?
12、人民币投票
给钱投票,不过在用户面前提钱想想都知道,不适用的。
?
13、定制方式
短时间内的多次投票,可能导致投票数下降;哈哈。
?
?部分摘自网络