12

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

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

4

7 回答 7

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%,但希望它们结合起来可以为您提供所需的保证水平。如果您想更上一层楼,您需要添加某种用户注册(这可以简单到在投票发生时询问有效的电子邮件地址并将确认链接发送到给定地址而不计算没有点击链接的投票 - 所以它不需要是一个成熟的“使用用户名/密码/名字/姓氏/等创建一个帐户”)。

于 2008-09-11T05:28:14.890 回答
1

不,你不能,只需要一个人和一个愿意的论坛来改变在线投票的结果

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

-亚当

于 2008-09-11T05:38:49.250 回答
0

不,这是用户的计算机,他们在控制之中。不幸的是,唯一的解决方案就是把它带回你的法庭,可以这么说并要求认证。

然而,验证码至少有助于限制对人类用户的投票。

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

于 2008-09-11T05:18:22.823 回答
0

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

使用诸如 IP 地址、浏览器用户代理、机器名称以及您可以获得的任何其他信息等内容构建用户配置文件怎么样?

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

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

于 2008-09-11T05:21:29.837 回答
0

由于您列出的原因,客户端解决方案已被淘汰——它们可以由用户操作。服务器端解决方案——正如你所说——可以被愚弄和绕过。

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

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

这是一个好的开始。

于 2008-09-11T05:23:28.287 回答
0

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

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

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

于 2008-09-11T05:23:48.520 回答
0

I have to agree that the short answer is no...though if you look at my recent answer here: How to anonymously identify a user and store that information you certainly can get it within a 6 percent margin of error.

于 2010-12-15T00:31:58.377 回答