目前我们正在举办一场比赛,进展非常顺利。不幸的是,我们让所有那些正在运行脚本的作弊者重新开始工作,这些脚本会自动为他们的条目投票。通过手动查看数据库条目,我们已经看到了一些作弊者——例如,在 70 分钟内使用相同浏览器的 5 星评级。现在随着用户群的增长,识别他们变得越来越困难。
到目前为止我们所做的:
- 我们存储 IP 和浏览器,并在一小时内阻止该组合。 Cookie 对这些人无济于事。
- 我们也在使用验证码,已被破解
有谁知道我们如何使用 PHP 脚本在数据库中找到模式,或者我们如何更有效地阻止它们?
任何帮助将不胜感激...
最佳答案
直接反馈消除
这更像是一种通用策略,可以与许多其他方法结合使用。不要让垃圾邮件发送者知道他是否成功。
您可以完全隐藏当前结果,只显示百分比而不显示绝对票数,或者延迟显示票数。
- 专业:擅长所有方法
- 缺点:如果欺诈行为很大,百分比显示和延迟将无效
投票标记
也是一种通用策略。如果您有理由认为投票是垃圾邮件发送者,请计算他们的投票并将其标记为无效,并在最后删除无效投票。
- 专业版:有效抵御所有可检测到的垃圾邮件攻击
- 缺点:投票偏向,更难设置,误报
验证码
使用 CAPTCHA .如果您的验证码坏了,请使用更好的验证码。
- 专业:对所有自动化脚本都很好。
- 缺点:对 pharygulation 无效
IP 检查
限制一个 IP 地址在一段时间内可以投的票数。
- 专业版:对抗那些在浏览器中不断按 F5 的随机家伙
- 专业版:易于实现
- 缺点:对 Pharyngulation 和使用代理服务器的复杂脚本无效。
- 缺点:一个 IP 地址有时会映射到许多不同的用户
推荐人检查
如果您假设一个用户映射一个 IP 地址,您可以限制该 IP 地址投票的数量。然而,这种假设通常只适用于私有(private)家庭。
- 专业版:易于实现
- 赞成:在一定程度上对简单的咽喉有很好的抵抗作用
- 缺点:很容易被自动化脚本规避
电子邮件确认
使用电子邮件确认,每封电子邮件只允许投一票。手动检查您的数据库以查看他们是否使用一次性电子邮件。
请注意,您可以添加 +foo
到您的电子邮件地址中的用户名。 username@example.com
和 username+foo@example.com
两者都会将邮件发送到同一个帐户,因此请记住在检查是否有人已经投票时。
- 专业版:擅长对付简单的垃圾邮件脚本
- 缺点:更难实现
- 缺点:有些用户不喜欢它
HTML 表单随机化
随机化选择的顺序。他们可能需要一段时间才能发现。
- 专业人士:无论如何都很高兴
- 骗局:一旦被发现,很容易规避
HTTPS
投票伪造的一种方法是从 Firefox 等有效浏览器捕获 http 请求并用脚本模仿它,这在使用加密时并不容易。
- 专业人士:无论如何都很高兴
- 专业:非常适合非常简单的脚本
- 缺点:更难设置
代理检查
如果垃圾邮件发送者通过代理投票,您可以查看 X-Forwarded-For标题。
- 专业版:适合使用代理的更高级脚本
- 缺点:一些合法用户可能会受到影响
缓存检查
尝试查看客户端是否加载了所有未缓存的资源。 许多垃圾邮件程序不这样做。我从来没有试过这个,我只知道投票网站通常不会检查这个。
例如嵌入 <img src="a.gif" />
在您的 html 中,a.gif 是一些 1x1 像素的图像。然后你必须为请求设置http头GET /a.gif
与 Cache-Control "no-cache, must-revalidate"
.您可以使用 .htaccess
在 Apache 中设置 http header 。像 this 这样的文件. (感谢贾科)
- 专业人士:据我所知不常见的方法
- 缺点:设置稍难
[编辑 2010-09-22]
Evercookie
- 一个所谓的evercookie可用于跟踪基于浏览器的垃圾邮件发送者
关于php - 在投票比赛中寻找作弊者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2333054/