在投票比赛中追捕作弊者

2022-08-30 09:22:12

目前,我们正在举办一项进展良好的比赛。不幸的是,我们有所有那些正在运行脚本的作弊者重新开始工作,这些脚本会自动为他们的条目投票。我们已经通过手动查看数据库条目看到了一些作弊者 - 例如,使用相同的浏览器的5星级评级恰好是70分钟。现在,随着用户群的成长,识别它们变得越来越困难。

到目前为止,我们所做的:

  1. 我们存储IP和浏览器,并将该组合阻止到一小时的时间范围。饼干对付这些家伙没有帮助。
  2. 我们还使用了已损坏的验证码

有谁知道如何使用PHP脚本在数据库中找到模式,或者我们如何更有效地阻止它们?

任何帮助将不胜感激...


答案 1

直接消除反馈

这更像是一种可以与许多其他方法结合使用的通用策略。不要让垃圾邮件发送者知道他是否成功。

您可以完全隐藏当前结果,仅显示百分比而不显示绝对票数,或者延迟显示投票。

  • 优点:对所有方法都很好
  • 缺点:如果欺诈是大规模的,百分比显示和延迟将无效

投票标记

也是一个一般策略。如果您有某种理由假设投票是由垃圾邮件发送者进行的,请计算他们的投票并将其标记为无效,并在最后删除无效投票。

  • 优点:可抵御所有可检测到的垃圾邮件攻击
  • 缺点:投票偏斜,更难设置,误报

验证码

使用验证码。如果您的验证码坏了,请使用更好的验证码。

  • 优点:适合所有自动化脚本。
  • 缺点:对咽部无用

知识产权检查

限制 IP 地址在一个时间跨度内可以投出的投票数。

  • 优点:对在浏览器中不断点击F5的随机家伙很好
  • 优点:易于实施
  • 缺点:对咽音和使用代理服务器的复杂脚本毫无用处。
  • 缺点:IP地址有时会映射到许多不同的用户

推荐人检查

如果假设一个用户映射一个 IP 地址,则可以限制该 IP 地址的投票数。然而,这种假设通常只适用于私人家庭。

  • 优点:易于实施
  • 优点:在一定程度上对单纯咽有好处
  • 缺点:很容易被自动化脚本规避

电子邮件确认

使用电子邮件确认,并且只允许每封电子邮件投票一次。手动检查您的数据库,看看他们是否在使用一次性电子邮件。

请注意,您可以在电子邮件地址中添加用户名。 并且都将邮件传递到同一帐户,因此请记住,在检查是否有人已经投票时。+foousername@example.comusername+foo@example.com

  • 优点:对简单的垃圾邮件脚本很好
  • 缺点:更难实施
  • 缺点:有些用户不会喜欢它

表单随机化

随机化选择的顺序。这可能需要一段时间才能让他们发现。

  • 优点:反正还不错
  • 缺点:一旦被发现,很容易规避

断续器

投票伪造的一种方法是从有效的浏览器(如Firefox)捕获http请求,并使用脚本进行模拟,当您使用加密时,这并不容易。

  • 优点:反正还不错
  • 优点:适合对非常简单的脚本
  • 缺点:设置起来更困难

代理检查

如果垃圾邮件发送者通过代理投票,您可以检查 X-Forwarded-For 标头。

  • 优点:适用于使用代理的更高级脚本
  • 缺点:一些合法用户可能会受到影响

缓存检查

尝试查看客户端是否加载了所有未缓存的资源。许多垃圾邮件机器人不会这样做。我从来没有尝试过这个,我只知道这通常不会被投票网站检查。

例如,嵌入到您的 html 中,a.gif是一些 1x1 像素的图像。然后,您必须使用 设置请求的 http 标头。你可以像这样用你的文件在Apache中设置http标头。(谢谢雅可)<img src="a.gif" />GET /a.gifCache-Control "no-cache, must-revalidate".htaccess

  • 优点:据我所知,不常见的方法
  • 缺点:设置稍微困难

[编辑于2010-09-22]

永恒饼干

  • 所谓的 evercookie 可用于跟踪基于浏览器的垃圾邮件发送者

答案 2

您是否尝试过进行浏览器指纹识别?检查这个来自EFF的开源:https://panopticlick.eff.org/ 可以用来识别一个类似于世界上500-1500的人(!)。


推荐