在投票比赛中狩猎作弊者

时间:2010-02-25 09:51:01

标签: php spam-prevention voting

目前我们正在进行一项非常顺利的比赛。不幸的是,我们让所有那些正在运行脚本的作弊者自动投票支持他们的作品。我们已经通过手工查看数据库条目看到了一些作弊者 - 例如,使用相同浏览器的5星评级完全是所有70分钟。现在,随着用户群的增长,识别它们变得越来越难。

我们到目前为止所做的事情:

  1. 我们存储IP和浏览器,并将该组合阻止为一小时的时间范围。 Cookies对这些家伙没有帮助。
  2. 我们也在使用已经破坏的Captcha
  3. 有谁知道我们如何使用PHP脚本在我们的数据库中找到模式,或者我们如何更有效地阻止它们?

    非常感谢任何帮助...

19 个答案:

答案 0 :(得分:78)

直接反馈消除

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

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

  • Pro:对所有方法都很好
  • Con:如果欺诈程度很大,百分比显示和延迟将无效

投票标记

也是一般策略。如果您有理由认为投票是由垃圾邮件发送者进行,请计算他们的投票并将其标记为无效并在结尾处删除无效投票。

  • Pro:对所有可检测的垃圾邮件攻击都很好
  • Con:倾斜投票,更难设置,误报

验证码

使用CAPTCHA。如果你的Captcha坏了,请使用更好的。

  • Pro:对所有自动脚本都很好。
  • Con:对pharygulation
  • 毫无用处

IP检查

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

  • 专业:对于在浏览器中不断点击F5的随机玩家
  • Pro:易于实施
  • Con:对使用代理服务器的Pharyngulation和精心设计的脚本毫无用处。
  • Con:IP地址有时会映射到许多不同的用户

推荐人检查

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

  • Pro:易于实施
  • Pro:在某种程度上对抗简单的咽喉炎
  • Con:通过自动脚本很容易规避

电子邮件确认

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

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

  • Pro:对抗简单的垃圾邮件脚本
  • Con:难以实施
  • Con:有些用户不喜欢它

HTML表格随机化

随机化选择顺序。他们可能需要一段时间才能找到答案。

  • 亲:反正很高兴
  • Con:一旦被发现,很容易被忽视

HTTPS

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

  • 亲:反正很高兴
  • Pro:非常简单的脚本
  • 骗局:设置起来比较困难

代理检查

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

  • Pro:对使用代理的更高级脚本
  • 更好
  • Con:某些合法用户可能会受到影响

缓存检查

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

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

  • Pro:据我所知,非常常见的方法
  • Con:稍微难以设置

[编辑2010-09-22]

Evercookie

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

答案 1 :(得分:6)

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

答案 2 :(得分:4)

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

答案 3 :(得分:2)

Vote to Promote模式(您可能已经意识到它)有一个关于如何减轻游戏的部分 - 但完全避免它是一个棘手的问题。鉴于你迄今为止采取的行动,我会考虑使用权重,例如考虑一段时间内的合理投票水平,比如每小时10票(只是一个例子而不是指南),而剩余票数则衡量接下来10年的90% (即仅计数9),接下来的10个为80%,依此类推。这是雅虎在这种模式下对游戏的建议:

  

社区投票系统确实提供了一个   挑战的数量。特别是   成员的可能性   社区可能会尝试游戏系统,   出于任何动机:

     
      
  • 恶意 - 也许是针对社区的另一名成员而且   会员的贡献。

  •   
  • 获得 - 从中​​获得一些奖励,金钱或其他   影响某些人的安置   池中的项目)

  •   
  • 或总体议程 - 始终宣传某些观点或   政治声明,很少   关注的实际质量   投票的内容。

  •   
     

有很多方法可以尝试   以防止这种类型的   滥用。虽然没有什么能阻止游戏   共。以下是一些方法   尽量减少或阻碍他们的滥用者   努力:

     
      
  • 投票给事物而不是人。与雅虎的总体战略保持一致,   不提供用户的能力   直接投票给另一个用户:他们的   看起来,他们的可爱性,   智力,或其他任何东西。它的   可以让社区投票   人的贡献,但不是   他们的品质。

         
        
    • 考虑投票率限制。   o仅允许用户在给定的范围内获得一定数量的投票   时间段。   o限制用户投票的次数(或费率)   记下特定用户的内容。 (至   防止ad-hominem攻击。)

    •   
    • 除了投票数之外,还要考虑其他因素。 Digg,for   例如,不计算他们的   仅根据数量进行Digg-score   投票收到的投票。其   算法还考虑:“故事   来源(是博客转发,还是   原创故事),用户历史,流量   故事类别的级别   在,用户报告。“他们更新   这个算法很频繁。考虑   保持确切的算法秘密   来自社区,或只讨论   一般意义上的因素输入。

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

  •   
     

虽然目前很受欢迎   网络上的模式,重要的是   考虑我们使用的背景   它。非常活跃和受欢迎   社区(Digg是一个很好的   例子),支持社区投票   也可以产生一定的消极性   精神(平均评论,自以为是   派系,群体袭击'异常值'   视点)。

答案 4 :(得分:2)

如果你真的很担心,那么你必须做一些像电子邮件验证这样的事情,这可能足以阻止大多数作弊者。

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

您创建的任何方案都可以进行游戏。

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

CAPTCHA不是灵丹妙药,用户可以让他们的脚本向他们显示CAPTCHA并手动解决它们至少每分钟几张票。

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

答案 9 :(得分:1)

您可以在Django中添加honeypot field。最有可能的是,这不会保护你免受那些故意想要改变你的竞争的骗子的影响,但至少你会有更少的'偷渡'垃圾邮件发送者来额外照顾。

答案 10 :(得分:1)

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

糟糕:
1)首先,它不能保证100%的安全 2)达到大量用户,过滤掉所有废话评级是非常困难的 3)在这种情况下忘记星级......他们总是5星或1星

好的
1)不要给他们定位他们的立场...我们用随机的TOP 100替换了“按地方排序”视图(只有前30名将赢得一个价格)...这真的有帮助,因为很多一旦他们没有看到他们站在哪里,用户就会失去兴趣。

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

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

**好运;-) **

答案 11 :(得分:1)

很抱歉双重帖子,但我不允许在同一篇文章中发布两个网址...

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

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

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

答案 14 :(得分:0)

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

在R中查看,它包含大量有用的分析包。

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

如何在提交投票前仅允许使用 openid reCaptcha 登录的用户,并使用相同的IP 监控提交者列表地址。

答案 18 :(得分:0)

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

reCAPTCHA是一个相当常用的服务