【问题标题】:Hunting cheaters in a voting competition在投票比赛中寻找作弊者
【发布时间】:2011-01-20 22:36:23
【问题描述】:

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

到目前为止我们所做的:

  1. 我们存储 IP 和浏览器,并在一小时内阻止该组合。 Cookie 对这些人无济于事。
  2. 我们还使用了验证码,已被破解

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

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

【问题讨论】:

  • IP和浏览器的组合不是唯一的组合。我在代理服务器后面,并使用标准浏览器。如果坐在我旁边的人使用相同的浏览器,我们中的一个人就不能投票(我们的 IP 与您的网站相同)。
  • 也许你已经被咽了。
  • @David:当垃圾邮件是一个大问题时,牺牲一些用户的访问权限可能是合理的
  • 此时您正与他们进行军备竞赛。您可能必须加强身份验证(让他们证明他们是特定的人)。这样做需要一个持久的身份,这对他们来说是有价值的。如果你允许匿名投票,你能做的最好的就是一一打击他们的诡计——他们比你有更多的空闲时间。为什么你认为 Stack Overflow 只允许有既定身份的人投票?
  • 正如往下说的,验证码并没有被破坏......用户每次都坐在电脑前输入验证码......他们似乎有很多时间。 .. 目前的解决方案 - 就在此时此刻 - 是按原样阻止 IP ......我们不再关心拥有一个 IP 的企业网络。我们不会向任何人提供有关他们在比赛中的位置的任何信息。我们只是说:底线、中场、明星……从最好的角度来看,我们只是为随机用户提供良好的投票……其余的必须手动完成。我真的希望它更容易;-)

标签: php spam-prevention voting


【解决方案1】:

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

【讨论】:

  • 啊,我忘记了...当然我们使用的是验证码...但这至少被两个用户破坏了...
  • recaptcha 以每 1000 个验证码 1 美元的汇率被识别
【解决方案2】:

直接反馈消除

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

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

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

投票标记

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

  • 专业版:有效抵御所有可检测到的垃圾邮件攻击
  • 骗局:投票偏向,更难设置,误报

验证码

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

  • 专业版:适用于所有自动化脚本。
  • 缺点:对pharygulation没用

IP 检查

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

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

推荐人检查

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

  • 专业版:易于实施
  • 专业:在一定程度上对简单的咽喉有很好的抵抗作用
  • 骗局:很容易被自动化脚本规避

电子邮件确认

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

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

  • 专业版:擅长对付简单的垃圾邮件脚本
  • 缺点:难以实施
  • 缺点:有些用户不喜欢它

HTML 表单随机化

随机化选择的顺序。他们可能需要一段时间才能发现。

  • 专业人士:无论如何都很高兴
  • 骗局:一旦检测到,很容易绕过

HTTPS

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

  • 专业人士:无论如何都很高兴
  • 专业版:非常适合非常简单的脚本
  • 缺点:更难设置

代理检查

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

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

缓存检查

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

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

  • 专业人士:据我所知不常见的方法
  • 缺点:设置稍难

[编辑 2010-09-22]

Evercookie

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

【讨论】:

  • 5.通过 NAT 共享 IP 的多台计算机的代理/动态 IP/过度杀伤。
  • 选项 6 是赢家:如果“浏览器”没有请求任何额外的资源/没有提出任何额外的请求,请考虑放弃投票。 (使用must-revalidate 放入一些资源)。
  • 现在有很多工具可以插入浏览器,甚至可以在 https 上捕获请求。 6 并不像听起来那么好。
  • 随机排序可能是个好主意 - 它避免了真正选民的偏见,他们可能会选择较早的选项而不是较晚的选项。
  • 电子邮件确认只是次要保护。 Mailinator 存在,设置一个拥有十亿个地址的域名真的没有那么难。当然,您也可以检测到这一点,但充其量只是打地鼠时间。
【解决方案3】:

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

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

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

编辑:正如其他人所建议的那样,您可以使用CAPTCHA(例如reCAPTCHA)来阻止自动机器人,并降低人类重复投票的可能性。以降低人类投票的可能性为代价。

【讨论】:

    【解决方案4】:

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

    reCAPTCHA 是一个相当常用的服务

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 啊,我忘记了...当然我们使用的是验证码...但这至少被两个用户破坏了...
        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

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

          • 恶意 - 可能是针对社区的另一名成员,并且 会员的贡献。

          • gain - 实现一些奖励,金钱或其他,来自 影响某些位置 池中的项目)

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

          有很多方法可以尝试 为了防止这种类型的 虐待。虽然没有什么可以阻止游戏 共。这里有一些方法可以 尽量减少或阻碍施虐者的 努力:

          • 投票给事物,而不是人。按照雅虎的总体战略, 不要为用户提供以下能力 直接投票给另一个用户:他们的 长相,他们的可爱, 智力,或其他任何东西。它是 可以让社区投票 人的贡献,但不是在 他们的性格品质。

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

            • 衡量除了票数之外的其他因素。迪格,为 例如,不计算他们的 Digg-score 仅基于数量 提交收到的选票。他们的 算法还考虑:“故事 来源(是博客转发,还是 原创故事)、用户历史、流量 故事所属类别的级别 和用户报告。”他们更新 这个算法经常。考虑 将确切的算法保密 来自社区,或仅讨论 一般情况下的因子输入。

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

          虽然这目前很流行 网络上的模式,重要的是 考虑我们使用的上下文 它。非常活跃和受欢迎 社区(Digg 是一个优秀的 示例)启用社区投票 也会产生一定的消极情绪 精神的(卑鄙的,自以为是的 派系,对“异常值”的集体攻击 观点)。

          【讨论】:

            【解决方案9】:

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

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

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                【解决方案11】:

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

                【讨论】:

                  【解决方案12】:

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

                  【讨论】:

                    【解决方案13】:

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

                    【讨论】:

                      【解决方案14】:

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

                      【讨论】:

                        【解决方案15】:

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

                        【讨论】:

                          【解决方案16】:

                          抱歉发了两次帖子,但我不被允许在同一个帖子中发布两个网址...

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

                          【讨论】:

                            【解决方案17】:

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

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

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

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

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

                            **祝你好运 ;-) **

                            【讨论】:

                              【解决方案18】:

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

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

                              【讨论】:

                                【解决方案19】:

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

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

                                【讨论】:

                                  猜你喜欢
                                  • 1970-01-01
                                  • 2012-05-20
                                  • 2013-11-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2022-10-01
                                  相关资源
                                  最近更新 更多