有没有一种可靠的方法可以防止在匿名用户可以投票的基于Web的竞赛中作弊?
我正在进行一个基于网络的竞赛,该竞赛应该允许匿名用户投票,但是我们希望阻止他们多次投票。可以使用匿名代理绕过基于IP的限制,用户可以清除cookie等。可以使用Silverlight应用程序,该应用程序可以访问隔离的存储,但用户仍然可以清除。
我认为,如果没有一些小丑用机器人或者其他东西投票赞成自己,那么这样做是不可能的。有想法吗?
解决方案
回答
不,这是用户的计算机,他们可以控制。
不幸的是,唯一的解决方案是将其重新带回法庭,以便说并需要认证。
但是,CAPTCHA至少可以将投票限制为人类用户。
当然,即使通过身份验证,我们也无法强制进行一次投票,因为这样一来,他们就会教机器人进行注册...
回答
我们当然可以使其困难。
如何使用IP地址,浏览器用户代理,计算机名称以及我们可以获得的其他任何信息来构建用户配置文件呢?
存储每个用户的个人资料,然后,如果收到的个人资料与数据库中已有的个人资料足够相似(我们必须对其进行调整),则可以投出该票。
我想我们可能可以使用silverlight建立更好的配置文件,尽管我不确定我们可以访问哪些信息。
回答
客户端解决方案由于我们列出的原因而退出-它们可以由用户操纵。如我们所说,服务器端解决方案可以被愚弄和绕过。
如果我们愿意接受一个事实,那就是我们无法真正确保100%的人均获得一票表决权,那么我们可以采取一些措施来降低噪音。
- 在提交投票的表单中使用CAPTCHA,以使机器人和脚本更难以投票。
- 将每个IP地址的投票数限制为一。
- 考虑要求注册才能投票。 (我知道这会打败我们最初的问题的一部分,但这可以使我们更好地控制投票。)
那是一个好的开始。
回答
我在比赛开发和监控中的亲身经历告诉我,没有,没有可靠的方法来避免如果让匿名用户投票(或者做任何让他们参与比赛的事情)作弊。
我们可以使用IP,在动作与下一动作之间引入延迟,但这确实很困难:最好的方法是引入验证码或者类似内容(如果适用于特定情况)。
最重要的是,不要让匿名用户参与:让他们"玩"并访问模拟,但是比赛需要登录。
回答
最简洁的答案是不。更长的答案是:但是我们可以使其变得任意困难。我会怎么做:
- 投票需要解决验证码(避免尽可能多的自动投票)。为了更加有效,我建议我们准备多种类型的简单验证码(例如"用猫捡照片"," 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%,但是希望将它们结合起来可以为我们提供所需的保证水平。如果我们希望将此级别提高到更高的水平,则需要添加某种类型的用户注册(可以很简单,例如在投票发生时询问有效的电子邮件地址,然后向该地址发送确认链接而不计算未单击链接的投票,因此它不需要是完整的"使用用户名/密码/名字/姓氏/名称等创建帐户")。
回答
不,我们不能,只需要一个人和一个愿意的论坛即可更改在线投票的结果。
我们必须意识到在线投票的固有缺陷,而不是试图绕开它们,而要利用它们来发挥自己的优势。
-亚当
回答
我必须同意,简短的答案是否定的……尽管如果我们在这里查看我最近的答案:如何匿名识别用户并存储该信息,我们当然可以在6%的误差范围内获得它。