代码之家  ›  专栏  ›  技术社区  ›  Chris

防止匿名投票赌博的最佳方法

  •  13
  • Chris  · 技术社区  · 14 年前

    我要为我的网站写一个投票方法。我想要一种方法来阻止人们对同一事物进行两次投票。到目前为止,我的想法是:

    • 一旦投票结束就放弃一个cookie(易受多浏览器游戏影响)
    • 每次投票记录IP地址(在代理/公司环境中失败)
    • 强制登录

    我的网站不是基于帐户的,尽管它聚合了Twitter数据,所以有使用Twitter的空间。 OAuth 作为识别的手段。

    现有的系统有哪些?它们是如何做到的?

    7 回复  |  直到 13 年前
        1
  •  11
  •   Peter Mortensen Aslan Kaya    13 年前

    最好是不允许匿名投票。如果用户被强制登录,您可以在每次投票时保存用户ID,并确保他/她只投票一次。

    cookie方法非常脆弱,因为cookie很容易被删除。IP地址方法有您自己描述的缺点。

        2
  •  3
  •   Question Mark    14 年前

    向用户认证系统迈出一步,但并非所有的复杂之处:

    让用户输入他们的电子邮件地址并确认他们的投票,你不会根除游戏,但你会使玩家更难注册另一个电子邮件地址,然后投票等。

    可能值得多走一步。

    让我们知道你的目的。

        3
  •  3
  •   bzlm    14 年前

    如果你想带着饼干走,那就用一个 evercookie .

    Evercookie是一个可以产生 浏览器中非常持久的cookie . 其目标 即使在删除了标准之后也要识别客户 cookie、flash cookie(本地共享对象或LSO),以及 其他。

    Evercookie通过将cookie数据存储在 在 本地浏览器。此外,如果Evercookie发现 用户删除了任何类型的cookie,它 使用可用的每个机制重新创建它们。

    当然,多浏览器作弊不会受到影响。

        4
  •  3
  •   Pedro Loureiro    13 年前

    你想保护自己不受什么类型的游戏影响?有人创建了几个机器人程序,用成千上万的请求轰炸你?或者一个没有更好的事情要做的人,尝试10-20票?

    是的,我知道:两者都有——但你最关心的是哪一个?

    使用验证码和基于电子邮件的投票 (发送一个链接到电子邮件以验证投票)可能对机器人程序很有效。但是人类或多或少可以利用电子邮件系统(正如我在一个答案中的评论,然后在这里再次发布)

    我拥有一个自定义域,我可以在其中拥有任何我想要的电子邮件。

    另一个例子:如果你的电子邮件是 MySux* @ Gmail网站 *,您可以使用 “我的用户+1@gmail.com” myuser+2@gmail.com等(加号和后面的文字) 它被忽略并被传递 到您的帐户)。您还可以包括 您用户名中的圆点(my.user@gmail.com)。(仅此) 在Gmail地址上工作!)

    为了防备人类,我不知道有没有饼干,但这可能是个不错的选择。 使用与Twitter、FB和其他网络集成的OAuth也可能工作得很好。

    另外,记住:要求某人投票的电子邮件会吓跑许多人!你的选票会少很多!

    另一个选择是 限制系统接受的投票数 从每分钟(或每小时或任何其他时间)的每个IP。为了防止分布式攻击,请限制系统在一个时间段内接受的投票总数。

        5
  •  1
  •   nnevala    14 年前

    不同的方法,只是为了提供另一种选择:

    假设大多数人都知道如何行事,或者只是不想为行为不端而烦恼,那就追溯性地清理选票。这也会使投票对选民保持低调。

    所以,设置cookie,记录每次投票,然后(或者在一个时间间隔上?)根据cookie值、IP/UserAgent组合等检查结果并删除重复项。

    我假设不主动阻止同一个人的多个投票,会将高技术规避方法的使用降到最低,而且结果很容易清理。

    作为一个反面,你可能无法在用户界面上实时显示实际的投票数,或者当一堆投票恰好丢失时会引起人们的注意。

        6
  •  1
  •   Andre    14 年前

    虽然我自己可能不会这么做,但是看看这些饼干,它们很难摆脱:

    http://samy.pl/evercookie/

    我处理这个问题和打击投票欺诈的另一种方式是要求一个电子邮件地址,然后一个人仍然可以投票,但是投票不会计算,直到他们点击电子邮件中的链接。这比完全注册更容易,但在消除大多数欺诈性投票方面仍然非常有效。

        7
  •  1
  •   FolksLord    13 年前

    如果不想强制用户登录,请考虑此Eng饼干,但强制Java脚本启用日志记录!

    这个Eng饼干是微不足道的,因为它是基于Java脚本的。攻击者不太可能使用浏览器,通过curl他可以生成toussends请求。hower这样的工具通常对javascript的支持很差。

    邮件更容易作弊。当你运行你自己的服务器时,你可以接受所有的电子邮件地址,所以你将拥有几乎无限的地址池。

    推荐文章