63

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

到目前为止我们所做的:

  1. 我们存储 IP 和浏览器并将该组合阻止到一小时的时间范围内。饼干对这些家伙没有帮助。
  2. 我们也在使用一个验证码,它已经被破解了

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

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

4

19 回答 19

79

直接反馈消除

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

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

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

投票标记

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

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

验证码

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

  • 优点:对所有自动化脚本都很好。
  • 缺点:对吞咽无用

IP检查

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

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

推荐人检查

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

  • 优点:易于实施
  • 优点:在某种程度上对简单的咽喉有好处
  • 缺点:很容易被自动化脚本规避

邮件确认

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

请注意,您可以+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.gifCache-Control "no-cache, must-revalidate"您可以像这样.htaccess在 Apache 中使用您的文件设置 http 标头。(感谢贾科)

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

[编辑 2010-09-22]

永远饼干

  • 所谓的evercookie可用于跟踪基于浏览器的垃圾邮件发送者
于 2010-02-25T09:56:50.243 回答
6

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

于 2010-02-25T11:02:01.360 回答
4

您可以在投票表格中添加验证码。还需要电子邮件确认将很有用

于 2010-02-25T09:56:43.593 回答
2

Vote to Promotion模式(您可能已经知道)有一节介绍了如何减少对游戏的影响——但要完全避免它是一个棘手的问题。鉴于您迄今为止的行动,我会考虑使用加权,例如考虑在一段时间内合理的投票水平,例如每小时 10 票(仅作为示例而非指南),剩余投票权重下一个 10 为 90% (即只计数 9),接下来的 10 个为 80%,依此类推。这是雅虎对这种模式下游戏的建议:

社区投票系统确实提出了许多挑战。尤其是社区成员出于各种动机而试图玩弄系统的可能性:

  • 恶意——也许是针对社区的另一名成员和该成员的贡献。

  • 收益 - 通过影响某些项目在池中的放置来实现一些奖励,无论是金钱还是其他)

  • 或总体议程 - 总是宣传某些观点或政治声明,而很少考虑投票内容的实际质量。

有多种方法可以尝试防止此类滥用。尽管没有什么可以完全阻止游戏。以下是一些减少或阻碍施虐者努力的方法:

  • 为事物投票,而不是为人投票。按照雅虎的总体策略,不要让用户直接投票给其他用户:他们的长相、可爱度、智力或其他任何东西。社区可以对一个人的贡献进行投票,但不能对他们的品格进行投票。

    • 考虑限制选票。o 只允许用户在给定时间段内获得一定数量的投票。o 限制用户对特定用户内容投反对票的次数(或速率)。(为了防止 ad-hominem 攻击。)

    • 权衡除了票数之外的其他因素。例如,Digg 不会仅根据提交的投票数来计算他们的 Digg 分数。他们的算法还考虑:“故事来源(是博客转发还是原始故事)、用户历史、故事所属类别的流量水平以及用户报告。” 他们经常更新这个算法。考虑对社区保密确切的算法,或者只笼统地讨论因子输入。

  • 如果关系信息可用,请考虑相应地加权用户投票。也许禁止具有正式关系的用户为彼此的提交投票。

虽然这是目前 Web 上的一种流行模式,但重要的是要考虑我们使用它的上下文。非常活跃和受欢迎的社区(Digg 是一个很好的例子)能够进行社区投票也可以产生某种消极的精神(刻薄的评论、固执己见的集团、对“异常”观点的集体攻击)。

于 2010-02-25T10:31:24.980 回答
2

如果您真的很担心,那么您必须进行电子邮件验证之类的操作,这可能足以阻止大多数作弊者。

此外,它还取决于 NAT 背后的多个人是否可能想要投票给同一个选项(例如最喜欢的学校)。

您创建的任何方案都可以被玩弄。

编辑:正如其他人所建议的那样,您可以使用诸如reCAPTCHA之类的验证码来阻止自动机器人,并使人类不太可能重复投票。以降低人类投票的可能性为代价。

于 2010-02-25T09:57:13.923 回答
2

查看 Asirra:http: //research.microsoft.com/en-us/um/redmond/projects/asirra/ 它仍处于测试阶段,但非常酷。

于 2010-02-25T17:29:52.943 回答
1

为了防止机器人投票,您可以使用CAPTCHA

于 2010-02-25T09:57:45.623 回答
1

唯一想到的是使用Captcha要么是像ReCaptcha服务那样带有图片和噪音的精心制作的服务,要么是像“七加三等于多少?”这样非常简单且不引人注目的服务。或(如果您位于美国),“我们总统的姓氏是什么”,每个人都可以回答的简单常识问题。如果您经常更改它们,这甚至可能比基于图像的经典 CAPTCHA 更有效。

于 2010-02-25T09:58:47.837 回答
1

很抱歉重复发布,但我不允许在同一个帖子中发布两个 URL...

如果您正在考虑构建自己的跟踪,也许此链接可能会提供一些灵感:https ://panopticlick.eff.org/ 事实证明,即使没有任何形式的跟踪 cookie,也可以唯一识别许多浏览器。我猜投票机器人可能会给出一个非常具体的指纹?

于 2010-02-25T17:41:22.810 回答
1

因此,如果每个人都想进行一场比赛,人们可以赢得一些东西,并想使用社区驱动的评分系统......在这里我分享一些经验:

坏处:
1) 首先它不能保证 100% 的安全
2) 接触到大量用户来过滤掉所有无意义的评级是非常困难的 3) 在这种情况下忘记星级......他们总是要么 5 星或 1 星

好处
1) 不要让他们了解他们所处的位置......我们用随机展示的 TOP 100 替换了“按位置排序”视图(只有前 30 名将赢得价格)......这真的很有帮助,因为很多用户一看到自己站在哪里就失去了兴趣。

2)不允许投票:1x5_Stars 40x1_Star...只允许以公平方式投票的用户...

3)他们中的大多数人都表现得有点愚蠢......你会在你的日志中看到它们,并且可以追踪谁投票公平,谁投票不公平......搜索模式......

**祝你好运 ;-) **

于 2010-03-18T22:10:35.873 回答
1

验证码不是灵丹妙药,用户可以让他们的脚本向他们显示验证码并手动解决它们,每分钟至少要进行几次投票。

您需要将它们与此处提到的其他技术结合使用。

于 2010-02-25T10:54:59.453 回答
1

您可以像在 Django中一样添加蜜罐字段。最有可能的是,这不会保护您免受故意想要改变您的竞争的作弊者的侵害,但至少您将有更少的“偷偷摸摸”的垃圾邮件发送者需要额外照顾。

于 2010-02-25T13:17:30.633 回答
0

CAPTCHA总是好的,但可能对某些用户来说“令人不安”。

reCAPTCHA是一项相当常用的服务

于 2010-02-25T09:57:20.863 回答
0

1.使用recaptcha
2.是随机化您的投票选项,但不是这样:
      ->从vote_id_1到asdsasd_1,grdsgsdg_2,
      而是使用会话变量在投票表格中设置从vote_id_1到asgjdas87th2ad的掩码。

于 2010-02-25T16:31:30.887 回答
0

我结合使用 CAPTCHA、IP 验证和 LSO(Flash 本地共享对象,普通人很难找到和删除)。

于 2010-02-25T13:56:37.347 回答
0

我们使用验证码和电子邮件的组合。用户通过邮件收到带有 GUID 的链接。对于每个尝试投票的用户来说,这个必须是唯一的。www.votesite.com/vote.aspx?guid=..... 通过使用此链接,投票是否得到确认。在数据库中,我们检查电子邮件地址和 GUID 的组合是否唯一。

于 2010-02-25T12:54:07.217 回答
0

一些事后随机分析呢,比如时间序列分析——寻找特定事件的周期性(ip, browser, vote)?然后,您可以将概率分配给它属于 1 个人的每个此类事件组,并丢弃超出某个概率水平的所有此类事件组,或者使用某种加权来根据概率降低权重。

在 R 中查看,它包含很多有用的分析包。

于 2011-07-23T09:48:41.243 回答
0

检查他们正在使用的电子邮件的域详细信息。我遇到了同样的问题,发现他们都注册了同一个注册人。我在这里写了:http: //tincan.co.uk/659/news/competition-spammers.html

现在,我过滤注册时使用的电子邮件的 DNS 信息。

于 2011-10-11T13:49:41.417 回答
0

只允许在提交投票前使用openidreCaptcha登录的用户,并监控具有相同 IP地址的提交者列表。

于 2010-02-25T10:10:04.203 回答