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

时间:2008-09-11 05:12:42

标签: asp.net silverlight

我正在开展基于网络的比赛,该比赛应允许匿名用户投票,但我们希望阻止他们多次投票。可以使用匿名代理绕过基于IP的限制,用户可以清除cookie等。可以使用可以访问独立存储的Silverlight应用程序,但用户仍然可以清除它。

如果没有一些小丑用机器人或其他东西投票,我认为不可能做到这一点。有个主意吗?

7 个答案:

答案 0 :(得分:19)

简短的回答是:不。更长的答案是:但你可以任意地使它变得困难。我会做什么:

  • 投票需要解决验证码(尽可能避免自动投票)。为了更有效,我建议准备多种类型的简单验证码(例如“用猫挑选照片”,“什么是2 + 2”,“输入单词”等)并通过一天中的时间和IP,这应该使自动系统无效(即如果有人使用IP A创建机器人来解决验证码,这将在第二天变得无用或者如果他/她将其分发到其他计算机/使用代理)
  • 当通过IP过滤时,您应该小心考虑多个主机落后于一个公共IP的情况(AFAIK AOL通过几个IP代理所有客户 - 因此这样的限制将有效地禁止AOL用户)。此外,许多代理发送指向原始IP的标题(如X-Forwarded-For),因此您也可以查看它。
  • 最后,使用像FSO(Flash共享对象 - “Flash Cookie”)这样的东西,对于99.99%不了解的人来说是模糊不清的。 Silverlight更加模糊。为了更加狡猾,您可以购买其他域名并从该域名设置FSO(因此,如果用户正在寻找您的域名设置的FSO,他们将看不到任何域名)

这些方法都不是100%,但希望它们能够为您提供所需的保证。如果你想把这个级别提高一些,你需要添加某种用户注册(这可以像在投票时询问有效的电子邮件地址一样简单,并向给定的地址发送确认链接而不计算没有点击链接的投票 - 所以它不需要是一个完整的“创建一个用户名/密码/冷杉名称/姓氏/等等的帐户”。)

答案 1 :(得分:1)

不,你不能,只需要一个人和一个愿意参与change the outcome of an online vote的论坛。

你必须意识到在线投票的固有缺陷,而不是试图绕过它们试图利用它们来发挥你的优势。

- 亚当

答案 2 :(得分:0)

不,这是用户的电脑,他们掌控着。 不幸的是,唯一的解决方案是将它带回你的法庭,以便发言并要求认证。

但是,CAPTCHA至少可以限制对人类用户的投票。

当然,即使使用身份验证,您也无法强制执行单一投票,因为他们会让机器人注册...

答案 3 :(得分:0)

你当然可以让它变得困难。

如何使用IP地址,浏览器使用者,计算机名称以及您可以获得的任何其他信息来构建用户配置文件。

为每个用户存储配置文件,然后如果您收到的配置文件与数据库中已有的配置文件相似(您必须对其进行调整),则可以抛弃该投票。

我想你可以使用silverlight构建一个更好的配置文件,但我不确定哪些信息可以让你访问。

答案 4 :(得分:0)

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

如果您愿意接受这样一个事实,即您无法100%确定每人获得一票,那么您可以采取一些措施来降低噪音。

  • 在投票提交表单中使用CAPTCHA,使机器人和脚本更难投票。
  • 将每个IP地址的投票数限制为一个。
  • 考虑要求注册才能投票。 (我知道这会破坏你原来问题的一部分,但它会让你对投票有更大程度的控制。)

这是一个好的开始。

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

我必须同意,简短的回答是否定的......但如果你看看我最近的回答:How to anonymously identify a user and store that information你当然可以在6%的误差范围内得到它。