我正在开展一个基于网络的竞赛,该竞赛应该允许匿名用户投票,但我们希望防止他们多次投票。基于 IP 的限制可以通过匿名代理绕过,用户可以清除 cookie 等。可以使用 Silverlight 应用程序,它可以访问隔离存储,但用户仍然可以清除它。
如果没有一些小丑用机器人或其他东西投票给自己,我认为不可能做到这一点。有想法吗?
我正在开展一个基于网络的竞赛,该竞赛应该允许匿名用户投票,但我们希望防止他们多次投票。基于 IP 的限制可以通过匿名代理绕过,用户可以清除 cookie 等。可以使用 Silverlight 应用程序,它可以访问隔离存储,但用户仍然可以清除它。
如果没有一些小丑用机器人或其他东西投票给自己,我认为不可能做到这一点。有想法吗?
最简洁的答案是不。更长的答案是:但你可以让它变得任意困难。我会做什么:
这些方法都不是 100%,但希望它们结合起来可以为您提供所需的保证水平。如果您想更上一层楼,您需要添加某种用户注册(这可以简单到在投票发生时询问有效的电子邮件地址并将确认链接发送到给定地址而不计算没有点击链接的投票 - 所以它不需要是一个成熟的“使用用户名/密码/名字/姓氏/等创建一个帐户”)。
不,这是用户的计算机,他们在控制之中。不幸的是,唯一的解决方案就是把它带回你的法庭,可以这么说并要求认证。
然而,验证码至少有助于限制对人类用户的投票。
当然,即使使用身份验证,您也无法强制执行单一投票,因为它们会教机器人注册......
你当然可以让它变得困难。
使用诸如 IP 地址、浏览器用户代理、机器名称以及您可以获得的任何其他信息等内容构建用户配置文件怎么样?
存储每个用户的配置文件,然后如果您收到的配置文件与数据库中已有的配置文件足够相似(您必须对其进行调整),您可以放弃该投票。
我想您可能可以使用 silverlight 建立一个更好的配置文件,但我不确定哪些信息可以让您访问。
由于您列出的原因,客户端解决方案已被淘汰——它们可以由用户操作。服务器端解决方案——正如你所说——可以被愚弄和绕过。
如果你愿意接受这样一个事实,即你不能 100% 确定每人只获得一票,那么你可以采取一些措施来减少噪音。
这是一个好的开始。
我在比赛开发和监控方面的个人经验告诉我,不,如果你让匿名用户投票(或做任何让他们参与比赛的事情),没有可靠的方法来避免作弊。
你可以玩 IP,在一个动作和下一个动作之间引入延迟,但这真的很困难:最好的方法是引入验证码或类似的东西,如果适用于你的特定情况。
最重要的是,不要让匿名用户参与:让他们“玩”并访问模拟,但比赛需要登录。
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.