php - 在投票比赛中寻找作弊者

标签 php spam-prevention voting

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

到目前为止我们所做的:

  1. 我们存储 IP 和浏览器,并在一小时内阻止该组合。 Cookie 对这些人无济于事。
  2. 我们也在使用验证码,已被破解

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

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

最佳答案

直接反馈消除

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

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

  • 专业:擅长所有方法
  • 缺点:如果欺诈行为很大,百分比显示和延迟将无效

投票标记

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

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

验证码

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

  • 专业:对所有自动化脚本都很好。
  • 缺点:对 pharygulation 无效

IP 检查

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

  • 专业版:对抗那些在浏览器中不断按 F5 的随机家伙
  • 专业版:易于实现
  • 缺点:对 Pharyngulation 和使用代理服务器的复杂脚本无效。
  • 缺点:一个 IP 地址有时会映射到许多不同的用户

推荐人检查

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

  • 专业版:易于实现
  • 赞成:在一定程度上对简单的咽喉有很好的抵抗作用
  • 缺点:很容易被自动化脚本规避

电子邮件确认

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

请注意,您可以添加 +foo到您的电子邮件地址中的用户名。 username@example.comusername+foo@example.com两者都会将邮件发送到同一个帐户,因此请记住在检查是否有人已经投票时。

  • 专业版:擅长对付简单的垃圾邮件脚本
  • 缺点:更难实现
  • 缺点:有些用户不喜欢它

HTML 表单随机化

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

  • 专业人士:无论如何都很高兴
  • 骗局:一旦被发现,很容易规避

HTTPS

投票伪造的一种方法是从 Firefox 等有效浏览器捕获 http 请求并用脚本模仿它,这在使用加密时并不容易。

  • 专业人士:无论如何都很高兴
  • 专业:非常适合非常简单的脚本
  • 缺点:更难设置

代理检查

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

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

缓存检查

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

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

  • 专业人士:据我所知不常见的方法
  • 缺点:设置稍难

[编辑 2010-09-22]

Evercookie

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

关于php - 在投票比赛中寻找作弊者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2333054/

相关文章:

php - 像 Stackoverflow 那样的独特用户投票策略?

php - curl 问题。 PHP 脚本未随叫随到

php - 拒绝解锁 exolnet/deprecated 因为它包含以下已安装的公式或木桶 :

python - 如何将项目添加到 collection.Counter?然后将它们分类为 ASC?

php - 阻止虚假用户注册垃圾邮件或链接

PHP/MySQL : In a Voting System, 如何阻止用户看到他已经投票过的个人资料?

algorithm - 评分算法 : how to convert the number & % of "Likes" & "Dislikes" into a single score?

php - 离任何日期还有多少天?

php - 谁能帮我解决这个问题吗?

javascript - 如何拦截 JavaScript 触发的表单提交?