使用匿名投票防止游戏的最佳方法

时间:2010-10-19 12:32:33

标签: php ajax voting voting-system

我即将为我的网站编写投票方法。我想要一种方法来阻止人们两次投票同样的事情。到目前为止,我的想法是:

  • 投票完成后删除cookie(易受多浏览器游戏影响)
  • 每次投票记录IP地址(这将在代理/公司环境中失败)
  • 强制登录

我的网站不是基于帐户的,虽然它汇总了Twitter数据,因此可以使用Twitter OAuth作为识别手段。

现有的系统是什么以及它们是如何做到的?

7 个答案:

答案 0 :(得分:11)

最好的办法是禁止匿名投票。如果用户被迫登录,您可以在每次投票时保存用户ID,并确保他/她只投票一次。

Cookie方法非常脆弱,因为可以轻松删除cookie。 IP地址方法有你自己描述的缺点。

答案 1 :(得分:3)

迈向用户身份验证系统的一步,但并非所有并发症:

让用户输入他们的电子邮件地址并确认他们的投票,你不会根除游戏,但你会让游戏玩家更难注册另一个电子邮件地址然后投票等。

可能值得额外一步。

让我们知道你最终的目的。

答案 2 :(得分:3)

如果您想要使用Cookie,请使用evercookie

  

evercookie是一个可用的JavaScript API   浏览器中非常持久的cookie 。它的目标   是在客户删除标准后识别客户   Cookie,Flash Cookie(本地共享对象或LSO),以及   其他

     

evercookie通过存储cookie数据来实现这一目标   可用的几种类型的存储机制   本地浏览器。此外,如果evercookie找到了   用户已删除任何类型的cookie,它   使用每种可用机制重新创建它们。

当然,多浏览器作弊不会受到影响。

答案 3 :(得分:3)

您希望自己保护哪种类型的游戏?有人创造了几个机器人并用成千上万的请求轰炸你?或者没有更好的事情要做的人并尝试以10-20票的价格?

是的,我知道:两者 - 但在这里你最关心的是哪一个?

将CAPTCHA与基于电子邮件的投票一起使用(发送电子邮件链接以验证投票)可能对机器人有效。但是人类可以或多或少地轻易利用电子邮件系统(因为我在一个答案中发表评论并再次发布)

  

我拥有自定义域名,我可以在其中收到任何我想要的电子邮件。

     

另一个例子:如果你的电子邮件是   myuser * @ gmail.com *,您可以使用   “myuser+1@gmail.com”   myuser+2@gmail.com等(加号和后面的文字   它被忽略了,它被交付了   到你的帐户)。你也可以包括   用户名中的点(my.user@gmail.com)。 (这只是   适用于Gmail地址!)

为了防范人类,我不知道cookie,但它可能是一个不错的选择。使用与twitter集成的OAuth,FB和其他网络也可能运行良好。

此外,请记住:要求某人投票的电子邮件会吓跑很多人!你将获得更少的选票!

另一个选择是限制系统接受的投票数每分钟每小时(或小时或其他)。为了防止分布式攻击,请限制系统在一段时间内接受的总投票数。

答案 4 :(得分:1)

不同的方法,只是为了提供替代方案:

假设大多数人都知道如何行事或者只是不能为行为不端而烦恼,只需追溯清理投票。这也将使投票不引人注目。

那么,设置cookie,记录每次投票和之后(或按时间间隔?)查看结果并根据cookie值,IP / UserAgent组合等删除重复项。

我认为不会主动阻止来自同一个人的多次投票,将高技术规避方法的使用保持在最低限度,结果很容易清理。

作为一个不好的方面,你不可能在用户界面上显示实际的投票数,或者当一堆选票碰巧丢失时会引发眉毛。

答案 5 :(得分:1)

虽然我可能不会自己这样做,但看看这些饼干,它们很难摆脱:

http://samy.pl/evercookie/

我不得不处理这个问题并与投票欺诈作斗争的另一种方式是要求一个电子邮件地址,然后一个人仍然可以投票,但是直到他们点击电子邮件中的链接才能计算投票数。这比注册时更容易,但在消除大部分欺诈性投票方面仍然非常有效。

答案 6 :(得分:1)

如果你不想强制用户登录,请考虑这个evercookie,但强制java脚本启用日志记录!

这个evercookie很容易阻止,因为它是基于java脚本的。攻击者不太可能使用浏览器,curl他可以生成请求的tousends。 Hovewer这样的工具通常有很差的javascript支持。

邮件更容易作弊。当您运行自己的服务器时,您可以接受所有电子邮件地址,因此您将拥有几乎无限的地址池。