目前我们正在进行一项非常顺利的比赛。不幸的是,我们让所有那些正在运行脚本的作弊者自动投票支持他们的作品。我们已经通过手工查看数据库条目看到了一些作弊者 - 例如,使用相同浏览器的5星评级完全是所有70分钟。现在,随着用户群的增长,识别它们变得越来越难。
我们到目前为止所做的事情:
有谁知道我们如何使用PHP脚本在我们的数据库中找到模式,或者我们如何更有效地阻止它们?
非常感谢任何帮助...
答案 0 :(得分:78)
这更像是一种可以与许多其他方法结合使用的一般策略。不要让垃圾邮件发送者知道他是否成功。
您可以完全隐藏当前结果,仅显示没有绝对投票数的百分比或延迟显示投票。
也是一般策略。如果您有理由认为投票是由垃圾邮件发送者进行,请计算他们的投票并将其标记为无效并在结尾处删除无效投票。
使用CAPTCHA。如果你的Captcha坏了,请使用更好的。
限制IP地址在一个时间段内可以投票的数量。
如果您假设一个用户映射一个IP地址,则可以通过该IP地址进行投票来限制该数量。然而,这种假设通常只适用于私人家庭。
使用电子邮件确认,每封电子邮件只允许一票。手动检查您的数据库,看看他们是否正在使用一次性电子邮件。
请注意,您可以在电子邮件地址中将+foo
添加到您的用户名中。 username@example.com
和username+foo@example.com
都会将邮件发送到同一帐户,因此请在检查某人是否已投票时记住。
随机化选择顺序。他们可能需要一段时间才能找到答案。
一种投票伪造方法是从Firefox等有效浏览器捕获http请求并使用脚本模仿它,当您使用加密时,这并不容易。
如果垃圾邮件发送者通过代理投票,您可以检查X-Forwarded-For标题。
尝试查看客户端是否加载了所有未缓存的资源。 许多垃圾邮件不会这样做。我从来没有试过这个,我只是知道通常不会通过投票网站来检查。
一个示例是在您的html中嵌入<img src="a.gif" />
,其中a.gif是一些1x1像素图像。然后,您必须使用GET /a.gif
为请求Cache-Control "no-cache, must-revalidate"
设置http标头。您可以使用.htaccess
文件设置Apache中的http标头,例如this。 (感谢Jacco)
[编辑2010-09-22]
答案 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背后的多人是否可能想要投票给同一选项(例如最喜欢的学校)。
您创建的任何方案都可以进行游戏。
编辑:正如其他人所建议的那样,您可以使用CAPTCHA等reCAPTCHA来阻止自动机器人,并使人类不太可能重复投票。以使人类不太可能投票为代价。
答案 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)