【发布时间】:2012-07-30 11:14:01
【问题描述】:
我想建立一个投票网站,类似于 Facebook 的 +1。
是否有一些对付作弊的最佳做法?
最好的方法是使用 facebook、twitter 和/或 google 来拥有唯一用户,但我想让匿名用户投票。
【问题讨论】:
-
您可以检查 IP 地址和用户代理。这将保留用户使用代理的可能性,但会大大减少对您的投票系统的滥用。
我想建立一个投票网站,类似于 Facebook 的 +1。
是否有一些对付作弊的最佳做法?
最好的方法是使用 facebook、twitter 和/或 google 来拥有唯一用户,但我想让匿名用户投票。
【问题讨论】:
您可以使用proof-of-work system 的某种形式来防范大规模的自动作弊。这将需要浏览器在投票中投入一些计算。单次投票不应该花费太长时间,但批量投票需要认真的计算工作。使用 JavaScript 进行投票也意味着任何批量投票机制都必须来自支持 JavaScript 的浏览器(或浏览器模拟),因此生成 HTTP 请求的简单脚本也会被挫败。
但是,这种方法不会显着延迟单个用户多次手动单击。因此,将此要求与 IP 地址日志、用户代理字符串、cookie,也许还有 flash cookie 结合起来。 cookie 将有助于识别尝试使用一系列连接重复投票的单个拨入用户。尽管刚刚列出的措施很容易被大规模的自动作弊攻击规避,但它们应该很好地(尽管不完美)处理手动投票。所以我认为这两种解决方案应该可以很好地相互补充。
您可能想要阻止匿名网络,例如 tor。不过,该块应该只会影响投票,因为您希望允许匿名用户查看您的网站,对吧?
您也可以考虑要求未经身份验证的用户解决CAPTCHA。根据投票的重要性以及有多少用户未经身份验证,您的用户可能会或可能不会被此措施阻止投票。
【讨论】:
根据我有限的经验,如果您不需要身份验证,系统很可能会以某种方式被欺骗:没有真正的防弹方法可以分辨谁是谁,除非您记录了大量与可能在统计上被认为是唯一的客户端(但您无法通过这种方法获得 100% 的确定性)。
当然,如果您预计有 10 个用户,这比处理数百万用户要容易得多。 IP + 用户代理检查在第一种情况下很可能没问题,但在第二种情况下就不太好(想到 NAT)。
最后,您必须考虑作弊的可能性,或者换句话说:您的用户真的会尝试欺骗系统吗,或者您可以很容易地检查信息而侥幸逃脱被伪造?
【讨论】: