如何防止用户多次投票?

时间:2011-12-28 15:09:17

标签: asp.net asp.net-mvc

我想阻止用户在我的网站上多次投票,我用两种方法做到这一点,但没有人做得那么好!!

  1. 使用Cookie
    问题:用户可以删除cookie并一次又一次地返回投票。

  2. 使用数据库表。
    问题:用户不应该被迫在我的网站注册!
  3. 那么,我怎么能解决这个问题呢?

4 个答案:

答案 0 :(得分:6)

你有两个答案,你需要决定哪个是最好的。没有选择是防弹的。这一切都是为了减慢它们的速度,以及您可以接受的效果水平。

Cookie通常是可以接受的方式。是的,可以清除cookie,但是如果希望防止重复投票 重要,那么注册是防止它的唯一有效方法。任何其他机制都可能被想要的人击败。您可以使用类似Evercookie的内容,但我一般认为这样做不是一个好习惯。如果您的注册过程简单但有效,一些用户会这样做。

IP地址与大多数重复IP未被静态分配一样存在缺陷。有人可以重置他们的调制解调器,并获得一个新的IP地址。或者更糟糕的是,有人可以重置他们的调制解调器,获得已经访问过该网站的IP地址,并且无法投票。另一种情况是NAT背后的用户。如果有200人与NAT共享IP,那么其中只有一人可以投票。

可以获得IP地址的创意。继续使用cookie,因为这将是有效的。如果您开始检测来自同一IP地址的多个投票(因为他们清除了Cookie),请显示CAPTCHA。如果不是某人试图滥用该系统,那么他们仍然有机会投票。这将有助于打败自动投票,并减慢用户的速度,滥用您的投票系统是不值得的。这也是可以被击败的,这是你可以接受的有效程度。即使注册也不是纯粹100%有效,但可能是最有效的。什么会阻止某人使用不同的电子邮件地址多次注册?

答案 1 :(得分:5)

我不认为你有很多选择,因为你没有强迫用户注册。您需要使用会话或cookie。正如评论中指出的,您还可以检查IP地址。但如果目标受众使用其ISP分配的动态IP地址,则此解决方案也会失败。

如果可能,您可以要求用户注册他们的facebook / google ID,就像stackoverflow正在进行

答案 2 :(得分:0)

没有一种绝对正确的方法可以从Web应用程序中完成您想要的任务,特别是无需用户注册。

答案 3 :(得分:0)

此网站(Stack Overflow)通过注册做得对。 IP是一个非常糟糕的主意,因为代理/服务器背后的所有人都无法投票。大多数人都有多个浏览器,您甚至不需要删除投票cookie再次投票,只需使用其他浏览器即可。如前所述,OpenID是影响最小的+最高安全路由。他们可以通过多个帐户解决这个问题。