130 likes | 357 Views
防止用户重复投票 问题剖析与解决. 问题产生 : 经常要用到的网上投票如果遇到作弊者将会直接影响投票的有效性 , 但是遇到各种各样的作弊方法 , 我们又应当如何防止呢 ?. 接下来我们会将深入分析几种防止重复投票的方法. 方法一 : 用验证码防止投票机 方法二 : 用 Session 来监督用户投票 方法三:用 COOKIE 来监督投票 方法四:注册用户才能且仅能投票一次 方法五: IP 检测,同一 IP 只能投票一次. 方法一:验证码防投票机.
E N D
问题产生:经常要用到的网上投票如果遇到作弊者将会直接影响投票的有效性,但是遇到各种各样的作弊方法,我们又应当如何防止呢?问题产生:经常要用到的网上投票如果遇到作弊者将会直接影响投票的有效性,但是遇到各种各样的作弊方法,我们又应当如何防止呢? 接下来我们会将深入分析几种防止重复投票的方法
方法一:用验证码防止投票机方法二:用Session来监督用户投票方法三:用COOKIE来监督投票方法四:注册用户才能且仅能投票一次方法五:IP检测,同一IP只能投票一次方法一:用验证码防止投票机方法二:用Session来监督用户投票方法三:用COOKIE来监督投票方法四:注册用户才能且仅能投票一次方法五:IP检测,同一IP只能投票一次
方法一:验证码防投票机 • 此法用于防止投票软件的重复投票,因为每一次投票都需要输入验证码,而验证码的数字显示在图片中只能用肉眼捕捉而无法用软件读取从而达到防止投票机重复投票的功能。 • 使用方法如同注册时讲过的,不再重复
方法二:用Session来监督用户投票 • 此方法利用Session这个面向对话级的变量来识别用户是否己经投票,如果投票过了就把Session变量标记,不允许再次投票 • 优点:投票一次过后不能再投,代码实现简单 • 缺点:关闭浏览器重新打开网页后,会建立新的Session值,便可再次投票
具体实现: • protected void Button1_Click(object sender, EventArgs e) • { • if( Session[“vote”]==null) • { • 投票; • Session[“vote"]=true; • } • else Response.write("您己经投过票了"); • } • 点击投票后判断Session[“vote”]是否为空——是则投票,投票完毕后将Session[“vote"]设置为true;否则不投。这样就达到了只能投票一次的效果
三、利用Cookie来防止重复投票 • 利用存储在客户端的数据Cookie来辩别用户是否己经投票从而有效的防止重复投票 • 优点:安全性较高,一旦投票,状态会伴随客户端而保存,达到一机投一次票的效果 • 缺点:当客户端把机器上的Cookies删除后便又可以进行投票
具体实现 • protected void Button1_Click(object sender, EventArgs e) • { if(Request.Cookies["abc"].Value==null) { 投票; • HttpCookie voted = new HttpCookie("voted"); • voted.Value = "1"; • voted.Expires = DateTime.Now.AddMinutes(1); • Response.Cookies.Add(voted); • } • else • Response.Write("您己经投过票了"); • }
方法四:注册用户投票一次 • 此法用于归定仅注册用户能够投票且仅能投票一次 • 优点:一用户一票制,若能建立在限制注册且高等用户才能投票的前提,则安全性极高 • 缺点:许多投票项目是允许匿名投票的,而且许多网站的用户注册流程必不复杂
具体实现 • 在用户信息表中多加一个字段voted,默认值为0,表示用户未曾投票,投票后将voted字段的值改为1表示用户己经投票完成,投票前需检测用户这个字段,只有未曾投票的用户才允许投票,否则提示己经投过票了的文字信息。实现流程较为简单,这里不再详述。
五、IP侦测,限制重复IP投票 • 现今常用较为有效方法,通过检测用户IP的方法,来防止用户重复投票。同一IP只允许投票一次。 • 缺点:首先,有时候一个大的局域网只有几个公网IP,此时几十个人只能投一两票不合理;IP变换以突破限制,IP变换的方法可以通过重新拨号连接或者寻找第三方代理服务器实现 • 优点:虽然不能绝对有效,但己经是较为安全的一种方法了。
具体实现 在数据库中建立IP表,每次用户投票之后记录IP,每次投票之前检测IP是否己存在于IP表中。如果己存在则不允许投票。 由于同一局域网内很可能同时用一个公网IP,出于此种考虑,在IP表中增加votetime字段,记录IP最后一次的投票时间。每次投票之前检测此IP是否在表中存在,不存在则允许投票,存在则比较上一次投票时间,超过两个小时才允许再次投票。
总结: • 综上所述,几乎所有的防止重复投票功能都有它的漏洞,我们仅仅能采取一些有效的手段有针对性的防止重复投票,所以我们必须根椐自己网站的独特性使用不同的方法,值得一提的是,上面各种方法是可以综合使用的,这样便可以使得防止投票效率最高化。