【发布时间】:2008-09-11 05:12:42
【问题描述】:
我正在开展一项基于网络的比赛,该比赛本应允许匿名用户投票,但我们希望防止他们多次投票。基于 IP 的限制可以通过匿名代理绕过,用户可以清除 cookie,等等。可以使用 Silverlight 应用程序,它可以访问隔离存储,但用户仍然可以清除它。
如果没有一些小丑用机器人或其他东西投票给自己,我认为不可能做到这一点。有想法吗?
【问题讨论】:
标签: asp.net silverlight
我正在开展一项基于网络的比赛,该比赛本应允许匿名用户投票,但我们希望防止他们多次投票。基于 IP 的限制可以通过匿名代理绕过,用户可以清除 cookie,等等。可以使用 Silverlight 应用程序,它可以访问隔离存储,但用户仍然可以清除它。
如果没有一些小丑用机器人或其他东西投票给自己,我认为不可能做到这一点。有想法吗?
【问题讨论】:
标签: asp.net silverlight
简短的回答是:不。更长的答案是:但你可以让它变得任意困难。我会做什么:
这些方法都不是 100%,但希望它们结合起来可以为您提供所需的保证水平。如果您想更上一层楼,您需要添加某种用户注册(这可以简单到在投票发生时询问有效的电子邮件地址并向给定地址发送确认链接而不计算未点击链接的投票 - 因此它不需要是完整的“使用用户名/密码/名字/姓氏/等创建帐户”。
【讨论】:
不,你不能,只需要一个人和一个愿意的论坛到change the outcome of an online vote。
您必须意识到在线投票的固有缺陷,而不是试图绕过它们,而是尝试利用它们为您带来优势。
-亚当
【讨论】:
你当然可以让它变得困难。
如何使用诸如 IP 地址、浏览器用户代理、机器名称以及您可以获得的任何其他信息等内容构建用户配置文件。
存储每个用户的个人资料,然后如果您收到的个人资料与数据库中已有的个人资料足够相似(您必须对其进行调整),您可以放弃该投票。
我想您可能可以使用 silverlight 建立更好的个人资料,但我不确定您可以访问哪些信息。
【讨论】:
由于您列出的原因,客户端解决方案无法使用——它们可以由用户操作。服务器端解决方案——正如你所说——可以被愚弄和绕过。
如果您愿意接受这样一个事实,即您不能 100% 确定每人只获得一票,那么您可以采取一些措施来减少噪音。
这是一个好的开始。
【讨论】:
我在竞赛开发和监控方面的个人经验告诉我,不,如果您让匿名用户投票(或做任何让他们参与竞赛的事情),没有可靠的方法可以避免作弊。
你可以玩 IP,在一个动作和下一个动作之间引入延迟,但这真的很困难:最好的方法是引入验证码或类似的东西,如果适用于你的特定情况。
最重要的是,不要让匿名用户参与:让他们“玩”并访问模拟,但比赛需要登录。
【讨论】:
不,这是用户的计算机,他们可以控制。 不幸的是,唯一的解决方案就是将其带回您的球场并要求身份验证。
但是,CAPTCHA 至少有助于将投票限制为人类用户。
当然,即使使用身份验证,您也不能强制执行单一投票,因为它们会教机器人注册...
【讨论】:
我不得不同意简短的回答是否定的……不过,如果您在这里查看我最近的回答:How to anonymously identify a user and store that information,您当然可以在 6% 的误差范围内得到它。
【讨论】: