在投票竞争中狩猎作弊者

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

我们到现在为止所做的:

  1. 我们存储的IP和浏览器,并阻止组合到一个小时的时间框架。 cookies不会对这些家伙有帮助。
  2. 我们也在使用一个已经被破解的validation码

有谁知道我们如何能find我们的数据库模式与PHP脚本或如何我们可以更有效地阻止他们?

任何帮助将不胜感激…

直接反馈消除

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

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

  • Pro:对付所有方法
  • Con:如果这个欺诈行为很厉害,百分比显示和延迟将不会有效

投票标记

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

  • Pro:对付所有可检测到的垃圾邮件攻击
  • 骗局:歪曲投票,难以build立,误报

validation码

使用CAPTCHA 。 如果您的validation码损坏,请使用更好的validation码。

  • Pro:对付所有自动化脚本。
  • 骗子 :没有用的反对咽下

IP检查

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

  • 专业版:对付那些在浏览器中不断打F5的随机小伙子
  • 临:易于实施
  • Con:对于使用代理服务器的Pharyngulation和精心制作的脚本没有用处。
  • Con:IP地址有时会映射到许多不同的用户

推荐人检查

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

  • 临:易于实施
  • 亲:在一定程度上反对简单的咽下
  • Con:很容易被自动化脚本绕过

邮件确认

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

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

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

HTML表单随机化

随机select的顺序。 这可能需要一段时间才能发现。

  • 临:很高兴有反正
  • 骗子:一旦发现,很容易规避

HTTPS

一种表决伪装的方法是从Firefox这样的有效浏览器中获取http请求,并用脚本来模仿,这在使用encryption时并不容易。

  • 临:很高兴有反正
  • Pro:对付非常简单的脚本
  • 骗子:设置起来比较困难

代理检查

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

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

caching检查

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

一个例子是在你的html中embedded<img src="a.gif" /> ,其中a.gif是一些1×1像素的图像。 然后你必须设置HTTP头的请求GET /a.gif Cache-Control "no-cache, must-revalidate" 。 你可以用这样的.htaccess文件在Apache中设置http头文件。 (谢谢Jacco)

  • 亲:据我所知,不常用的方法
  • 骗子:稍微难一些

[编辑2010-09-22]

Evercookie

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

你有没有尝试做浏览器指纹? 查看EFF的这个开源代码: https: //panopticlick.eff.org/可以用来识别世界上一个类似于500-1500的人(!)。

您可以添加validation码到投票表格。 还需要电子邮件确认将是有用的

如果你真的担心,那么你必须做一些电子邮件validation,这可能足以阻止大多数骗子。

这也取决于NAT背后的多个人是否可能想要为相同的选项投票(例如最喜欢的学校)。

你创build的任何scheme都可以被玩弄。

编辑:正如其他人都build议,你可以使用validation 码 ,如reCAPTCHA阻止自动机器人,并使人类重复投票的可能性较小。 以使人类投票的可能性降低为代价。

推广模式的投票 (你可能会意识到这一点)有一个关于如何减轻对抗游戏的部分 – 但是完全避免是一个棘手的问题。 考虑到你现在的行为,我会考虑使用加权,例如考虑一段时间内的合理的投票水平,比如每小时10票(仅仅是一个例子,不是一个指南),剩余票数是下一个10%,90% (即只计算9),接下来的10%计为80%等等。 这是雅虎在这种模式下对游戏的build议:

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

  • 恶意 – 也许是对另一个社区成员和该成员的贡献。

  • 获得 – 实现一些奖励,货币或其他,不影响某些项目在池中的位置)

  • 或总体议程 – 总是提倡某些观点或政治言论,而很less考虑被投票内容的实际质量。

有很多方法可以防止这种滥用。 尽pipe没有什么可以完全停止游戏。 以下是一些方法来减less或阻碍滥用者的努力:

  • 投票的事情,而不是人。 为了与雅虎的总体战略保持一致,不要让用户直接投票给其他用户:他们的外表,他们的喜欢,智慧或其他任何东西。 社群可以对某人的贡献进行投票,但不会影响他们的品质。

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

    • 除了票数之外,还要考虑其他因素。 例如,Digg不会仅仅根据提交的投票数来计算他们的Digg分数。 他们的algorithm还考虑:“故事来源(是博客转贴,还是原始故事),用户历史,故事所属类别的stream量级别以及用户报告。 他们经常更新这个algorithm。 考虑保持精确的algorithm对于社区是秘密的,或者只是一般性地讨论因子input。

  • 如果关系信息可用,则考虑相应地对用户投票加权。 也许禁止有正式关系的用户互相投票。

虽然这是目前在networking上stream行的模式,但重要的是要考虑我们使用它的上下文。 非常活跃和受欢迎的社区(Digg是一个很好的例子),使社区投票也可以产生一定的精神消极(意味着评论,自发的派系,团体攻击“离群值”的观点)。

看看Asirra: http: //research.microsoft.com/en-us/um/redmond/projects/asirra/它还在testing阶段,但是非常酷。

为了防止僵尸投票,你可以使用CAPTCHA 。

唯一想到的就是使用validation码。 要么是像ReCaptcha服务那样精致的图片和噪音,要么就是一个非常简单而不显眼的“七七加三”。 或者(如果你在美国),“我们总统的姓氏是什么”,每个人都可以回答的简单的常识问题。 如果你经常改变它们,甚至可能比经典的基于图像的CAPTCHA更有效。

validation码不是一个silverlight的子弹,用户可以让他们的脚本显示CAPTCHA给他们,并手动解决他们至less每分钟几张选票。

您需要结合使用这里提到的其他技术。

你可以像Django一样添加一个蜜jar字段 。 最有可能的是,这不会保护你免于故意改变你的竞争对手,但至less你会有更less的“驱车”垃圾邮件发送者的额外照顾。

对不起,双后,但我不能在同一post中发布两个url…

如果您正在build立自己的跟踪,也许这个链接可能会提供一些灵感: https: //panopticlick.eff.org/原来,许多浏览器可以被唯一标识,即使没有任何forms的跟踪cookie。 我猜猜投票机器人可能会给一个非常具体的指纹?

所以如果每个人都想做一个人们可以赢得比赛的比赛,并想使用社区驱动的评级系统…在这里我分享一些经验:

不好:
1)首先不能保证100%
2)达到大量的用户筛选出所有的无意义评级是非常困难的3)忘记星级评级在这种情况下…他们总是5星或1星

好的
1)不要给他们定位他们站在哪里…我们用“随机排列”视图replace了排名前100的顶级排名(只有排名前30的顶级域名赢得价格),这真的很有帮助,因为很多用户一看到自己的位置就立即失去了兴趣。

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

3)他们大多有点愚蠢…你会看到他们在你的日志,可以追查谁投票公平和谁不公平…search模式…

**祝你好运 ;-) **

validation码总是好的,但对于一些用户可能是“令人不安”的。

reCAPTCHA是一个相当使用的服务

在提交投票之前,只允许使用openidreCaptchalogin的用户,并使用相同的IP地址监控提交者列表。

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

我使用了CAPTCHA,IPvalidation和LSO(Flash本地共享对象,很难find和删除为普通人)的组合。

1. 使用recaptcha
2.是随机select你的投票选项,但不是这样的:
– >从vote_id_1到asdsasd_1,grdsgsdg_2,
而是使用会话variables在voteforms中将vote_id_1设置为asgjdas87th2ad。

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

看R,它包含了很多有用的分析包。

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

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