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

StackOverflow https://stackoverflow.com/questions/55835

  •  09-06-2019
  •  | 
  •  

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

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

有帮助吗?

解决方案

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

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

这些方法都不是 100%,但希望它们结合起来可以为您提供所需的保证级别。如果您想将其提升到更高的水平,您需要添加某种用户注册(这可以很简单,例如在投票发生时询问有效的电子邮件地址并向给定地址发送确认链接,并且不计算未点击链接的投票 - 因此不需要是成熟的“使用用户名/密码/名字/姓氏/等创建帐户”)。

其他提示

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

您必须认识到在线投票的固有缺陷,而不是试图绕过它们,而是尝试利用它们来为自己谋利。

-亚当

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

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

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

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

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

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

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

这是一个好的开始。

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

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

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

不,这是用户的计算机,他们处于控制之中。不幸的是,唯一的解决方案是将其带回您的法庭,可以这么说并要求身份验证。

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

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

我必须同意简短的答案是否定的......不过如果你看看我最近的回答: 如何匿名识别用户并存储该信息 你当然可以在 6% 的误差范围内得到它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top