【问题标题】:vote algorithm to avoid cheat投票算法避免作弊
【发布时间】:2012-07-30 11:14:01
【问题描述】:

我想建立一个投票网站,类似于 Facebook 的 +1。

是否有一些对付作弊的最佳做法?

最好的方法是使用 facebook、twitter 和/或 google 来拥有唯一用户,但我想让匿名用户投票。

【问题讨论】:

  • 您可以检查 IP 地址和用户代理。这将保留用户使用代理的可能性,但会大大减少对您的投票系统的滥用。

标签: algorithm vote


【解决方案1】:

您可以使用proof-of-work system 的某种形式来防范大规模的自动作弊。这将需要浏览器在投票中投入一些计算。单次投票不应该花费太长时间,但批量投票需要认真的计算工作。使用 JavaScript 进行投票也意味着任何批量投票机制都必须来自支持 JavaScript 的浏览器(或浏览器模拟),因此生成 HTTP 请求的简单脚本也会被挫败。

但是,这种方法不会显着延迟单个用户多次手动单击。因此,将此要求与 IP 地址日志、用户代理字符串、cookie,也许还有 flash cookie 结合起来。 cookie 将有助于识别尝试使用一系列连接重复投票的单个拨入用户。尽管刚刚列出的措施很容易被大规模的自动作弊攻击规避,但它们应该很好地(尽管不完美)处理手动投票。所以我认为这两种解决方案应该可以很好地相互补充。

您可能想要阻止匿名网络,例如 tor。不过,该块应该只会影响投票,因为您希望允许匿名用户查看您的网站,对吧?

您也可以考虑要求未经身份验证的用户解决CAPTCHA。根据投票的重要性以及有多少用户未经身份验证,您的用户可能会或可能不会被此措施阻止投票。

【讨论】:

    【解决方案2】:

    根据我有限的经验,如果您不需要身份验证,系统很可能会以某种方式被欺骗:没有真正的防弹方法可以分辨谁是谁,除非您记录了大量与可能在统计上被认为是唯一的客户端(但您无法通过这种方法获得 100% 的确定性)。

    当然,如果您预计有 10 个用户,这比处理数百万用户要容易得多。 IP + 用户代理检查在第一种情况下很可能没问题,但在第二种情况下就不太好(想到 NAT)。

    最后,您必须考虑作弊的可能性,或者换句话说:您的用户真的会尝试欺骗系统吗,或者您可以很容易地检查信息而侥幸逃脱被伪造?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-08
      • 2011-01-20
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多