Asp.net 在匿名用户可以投票的网络竞赛中,有没有可靠的方法来防止作弊?

Asp.net 在匿名用户可以投票的网络竞赛中,有没有可靠的方法来防止作弊?,asp.net,silverlight,Asp.net,Silverlight,我正在进行一项基于网络的竞赛,该竞赛应该允许匿名用户投票,但我们希望阻止他们不止一次投票。匿名代理可以绕过基于IP的限制,用户可以清除Cookie等。可以使用Silverlight应用程序,该应用程序可以访问隔离存储,但用户仍然可以清除这些限制 我认为如果没有某个小丑用机器人之类的东西投票支持自己,这是不可能的。有主意吗?没有,这是用户的电脑,由他们控制。 不幸的是,唯一的解决办法就是把它带回到你的法庭上,并要求认证 然而,验证码至少有助于将投票限制在人类用户 当然,即使使用身份验证,您也不能强

我正在进行一项基于网络的竞赛,该竞赛应该允许匿名用户投票,但我们希望阻止他们不止一次投票。匿名代理可以绕过基于IP的限制,用户可以清除Cookie等。可以使用Silverlight应用程序,该应用程序可以访问隔离存储,但用户仍然可以清除这些限制


我认为如果没有某个小丑用机器人之类的东西投票支持自己,这是不可能的。有主意吗?

没有,这是用户的电脑,由他们控制。 不幸的是,唯一的解决办法就是把它带回到你的法庭上,并要求认证

然而,验证码至少有助于将投票限制在人类用户


当然,即使使用身份验证,您也不能强制执行单一投票,因为这样他们会教机器人注册…

您肯定会让它变得困难

用ip地址、浏览器用户代理、机器名以及您可以获得的任何其他信息来构建用户配置文件怎么样

存储每个用户的配置文件,然后如果您收到的配置文件与数据库中已经存在的配置文件足够相似(您必须对此进行调整),您可以放弃该投票


我想您可能可以使用silverlight构建更好的配置文件,尽管我不确定您可以访问哪些信息。

客户端解决方案是出于您列出的原因而推出的--它们可以由用户操纵。服务器端解决方案——正如您所说的——可以被愚弄和绕过

如果你愿意接受这样一个事实,即你不能100%确定你每个人只得到一张选票,那么你可以采取一些措施来减少噪音

  • 在投票提交表单中使用验证码,使机器人程序和脚本更难投票
  • 将每个IP地址的投票数限制为1
  • 考虑要求登记才能投票。(我知道这一点挫败了你原来问题的一部分,但它让你对投票有了更大程度的控制。)

这是一个好的开始。

我个人在竞赛开发和监控方面的经验告诉我,如果你让匿名用户投票(或做任何让他们参与竞赛的事情),没有可靠的方法可以避免作弊

你可以使用IP,在一个动作和下一个动作之间引入延迟,但这确实很困难:最好的方法是引入验证码或类似的东西,如果适用于你的特定情况


最重要的是,不要让匿名用户参与:让他们“玩”并访问模拟,但比赛需要登录。

简短的答案是:不。较长的答案是:但你可以任意设置难度。我要做的是:

  • 投票需要解决验证码(以尽可能避免自动投票)。为了更有效,我建议准备多种类型的简单验证码(如“选择与猫的照片”、“2+2是什么”、“键入单词”等),并按时间和IP旋转它们,这将使自动系统无效(即,如果使用IP A的人创建了一个机器人来解决验证码问题,第二天将变得无用,或者如果他/她将其分发到其他计算机/使用代理)
  • 当用IP过滤时,你应该仔细考虑多个主机在一个公共IP后面的情况(AFAIK美国在线通过一些IPS代理所有的客户),这样的限制会有效禁止美国在线用户。,所以你也可以看看
  • 最后,使用类似FSO(Flash共享对象-“Flash cookies”)的东西对99.99%的人来说是很模糊的。Silverlight甚至更模糊。为了更隐蔽,你可以购买其他域并从该域设置FSO(因此,如果用户正在寻找由你的域设置的FSO,他们不会看到任何)

这些方法都不是100%,但希望结合起来,它们能为您提供所需的保证级别。如果您想提高这一级别,您需要添加某种用户注册(这可以很简单,只要在投票时询问一个有效的电子邮件地址,并向给定地址发送一个确认链接,而不计算未点击链接的选票,因此不需要是一个完整的“使用用户名/密码/首名/姓氏/等创建帐户”)不,你不能,只需要一个人和一个愿意的论坛就可以了

你必须意识到在线投票的固有缺陷,而不是试图绕过这些缺陷,而是尝试利用它们为你带来好处


-亚当

我不得不同意,简短的答案是否定的……不过如果你看看我最近的答案:你肯定可以在6%的误差范围内得到它