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

Php 防止匿名投票游戏的最佳方法,php,ajax,voting,voting-system,Php,Ajax,Voting,Voting System,我即将为我的网站写一个投票方法。我想要一种方法来阻止人们对同一件事投两次票。到目前为止,我的想法是: 投票完成后删除cookie(易受多浏览器游戏影响) 每次投票记录IP地址(在代理/公司环境中此操作将失败) 强制登录 我的网站本身不是基于账户的,尽管它聚合了Twitter数据,所以可以使用Twitter作为身份识别的手段 现有的系统有哪些?它们是如何做到这一点的?最好是禁止匿名投票。如果用户被迫登录,您可以在每次投票时保存用户ID,并确保他/她只投票一次 cookie方法非常脆弱,因为co

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

  • 投票完成后删除cookie(易受多浏览器游戏影响)
  • 每次投票记录IP地址(在代理/公司环境中此操作将失败)
  • 强制登录
我的网站本身不是基于账户的,尽管它聚合了Twitter数据,所以可以使用Twitter作为身份识别的手段


现有的系统有哪些?它们是如何做到这一点的?

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


cookie方法非常脆弱,因为cookie很容易被删除。IP地址方法有您自己描述的缺点。

实现用户身份验证系统的一个步骤,但并非所有的复杂性:

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

也许值得多走一步


让我们知道您的最终目标。

不同的方法,只是提供一个替代方案:

假设大多数人知道如何表现,或者只是不介意表现不好,那么就追溯一下选票。这也将保持投票对选民的低调

因此,设置cookie,记录每次投票,然后(或按时间间隔?)根据cookie值、IP/UserAgent组合等检查结果并删除重复项

我认为,不主动阻止来自同一个人的多张选票,可以将使用高度技术性的规避方法的情况降到最低,并且结果很容易清理


另一方面,您可能无法在用户界面上实时显示实际的投票数,或者当一堆选票恰好丢失时,您会感到惊讶。

如果您想使用cookies,请使用

evercookie是一个可用于生成 浏览器中持久性极高的Cookie。它的目标 是在客户删除标准后识别客户 Cookie、Flash Cookie(本地共享对象或LSO)和 其他的

evercookie通过将cookie数据存储在 上提供的几种类型的存储机制 本地浏览器。此外,如果evercookie已找到 用户已删除任何有问题的cookie类型 使用每个可用机制重新创建它们


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

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


我处理这个问题和打击投票欺诈的另一种方式是,要求提供一个电子邮件地址,然后一个人仍然可以投票,但在他们点击电子邮件中的链接之前,选票不会计算在内。这比完全登记更容易,但在消除大多数欺诈性投票方面仍然非常有效

> P>如果你不想强制用户登录,请考虑这个Eng饼干,但是强制java脚本来启用日志记录! 这个evercookie很容易阻止,因为它是基于java脚本的。攻击者可能不会使用浏览器,因为通过curl,他可以生成大量请求。howewer这类工具通常缺乏javascript支持


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

你想保护自己免受什么类型的游戏的伤害?有人创造了几个机器人,然后用数千(数百万)个请求轰炸你?还是一个没有更好的事情要做却试图获得10-20票的人

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

使用验证码和基于电子邮件的投票(发送电子邮件链接以验证投票)可以很好地对抗机器人。但是人类或多或少可以利用电子邮件系统(正如我在一个答案中所评论的那样,并在这里再次发布)

我拥有一个自定义域,我可以在其中有任何我想要的电子邮件

另一个例子:如果你的电子邮件是 myuser*@gmail.com*,您可以使用 “我的用户+1@gmail.com" 我的用户+2@gmail.com,等(加号和后面的文字) 它被忽略,并被交付 您的帐户)。您还可以包括 您的用户名中的点(我的。user@gmail.com). (仅此而已 在gmail地址上工作!)

为了保护人类免受伤害,我不知道是否使用cookie,但它可能是一个不错的选择。使用OAuth与twitter、FB和其他网络集成也可能很好

另外,请记住:要求某人发送电子邮件进行投票会吓跑很多人!你会得到更少的选票


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

我是否可以使用他们的twitter登录名作为我网站的登录名?所以只要他们登录到twitter,他们就可以访问我的网站?@Chris,是的。最简单的方法可能是使用第三方SSO提供程序,例如不总是容易删除。请注意:如果您访问evercookie网站,它将(尝试)在您的浏览器上放置evercookie。最近Bruce Schneier在一篇帖子上发表的评论包含了对该网站的一个有趣的讨论:@APC为什么要发出警告?我认为大多数网站在访问时都会试图在我的浏览器上添加cookieevercookies的要点是,即使您已将浏览器设置为不接受第三方Cookie,该软件也会尝试将其uber Cookie之一放在您身上。当然