13

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

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

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

存在哪些现有系统以及它们如何做到这一点?

4

7 回答 7

11

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

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

于 2010-10-19T12:37:10.830 回答
3

迈向用户身份验证系统的一步,但并非所有复杂情况:

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

可能值得额外的步骤。

让我们知道你最终要做什么。

于 2010-10-19T12:45:39.890 回答
3

如果您毕竟想使用 cookie,请使用evercookie

evercookie 是一种可用的 javascript API,可在浏览器中生成极其持久的 cookie。它的目标是即使在他们删除了标准 cookie、Flash cookie(本地共享对象或 LSO)等之后也能识别客户端。

evercookie 通过将 cookie 数据存储在本地浏览器上可用的多种存储机制中来实现这一点。此外,如果evercookie 发现用户删除了任何有问题的cookie 类型,它会使用每种可用的机制重新创建它们。

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

于 2010-10-19T13:11:05.177 回答
3

您想保护自己免受哪种类型的游戏侵害?有人创建了几个机器人并用数千(数百万)个请求轰炸你?还是没有更好的事情可做并尝试投出 10-20 票的人?

是的,我知道:两者都有——但你最关心的是哪一个?

将 CAPTCHA 与基于电子邮件的投票(发送电子邮件链接以验证投票)结合使用可能会很好地对抗机器人。但是人类或多或少可以轻松地利用电子邮件系统(正如我在一个答案中评论并再次在此处发布的那样)

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

另一个例子:如果您的电子邮件是 myuser* @gmail.com *,您可以使用“myuser+1@gmail.com”myuser+2@gmail.com 等(加号和它后面的文本被忽略,它是发送到您的帐户)。您还可以在您的用户名 (my.user@gmail.com) 中包含点。(这仅适用于 gmail 地址!)

为了防止人类,我不知道 cookie 但它可能是一个不错的选择。使用与 twitter、FB 和其他网络集成的 OAuth 也可以很好地工作。

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

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

于 2011-01-25T11:16:46.187 回答
1

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

假设大多数人都知道如何表现,或者只是懒得做坏事,那就追溯清理选票。这也将使投票对选民不显眼。

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

我假设不主动阻止来自同一个人的多票可以将高度技术性的规避方法的使用降至最低,并且结果很容易清理。

不利的一面是,您可能无法在用户界面上实时显示实际的投票计数,否则当一堆选票恰好丢失时会引起人们的注意。

于 2010-10-19T12:56:27.267 回答
1

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

http://samy.pl/evercookie/

我不得不解决这个问题并打击投票欺诈的另一种方法是要求一个电子邮件地址,然后一个人仍然可以投票,但只有在他们点击电子邮件中的链接之后,投票才会被计算在内。这比完全注册要容易,但在消除大部分欺诈性选票方面仍然非常有效。

于 2010-10-19T16:26:58.303 回答
1

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

这个 evercookie 很容易被阻止,因为它是基于 java 脚本的。攻击者不太可能使用浏览器,使用 curl 他可以生成数以千计的请求。但是,此类工具通常对 javascript 的支持很差。

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

于 2011-01-25T10:53:00.640 回答