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

每个IP地址限投1票?

  •  6
  • burnt1ce  · 技术社区  · 16 年前

    我真正想要的是限制每个人1票,但我能想到的第二件事是限制每个IP地址1票,以防止恶意用户/黑客对我公司的投票系统产生严重影响。我正在考虑使用数据库来跟踪IP地址。

    更新: 很抱歉第一次不清楚,阿隆德。我想知道的是,限制每个IP地址1票是否是限制每个人1票的好策略。基本上,我想知道1个唯一的IP地址是否大致等于1个人。人们已经提到,代理和路由器重复使用IP地址,所以不幸的是,许多人可以使用相同的IP地址。

    谢谢。我认为,对于我的情况,最好不要限制每个IP地址1票。

    7 回复  |  直到 12 年前
        1
  •  18
  •   RiddlerDev    16 年前

    我建议不要采用IP方法。当我在你的一些大型互联网服务提供商大量重用IP(AOL…)之前看到这一点时,但是如果你确实使用IP地址,请使用数据库来跟踪它们。要做到这一点,一个快速的方法是将其作为一个唯一的键,并将异常捕获为“已投票”。

    要添加的一个好处是,不要向用户显示他们的投票没有计算在内,只需显示结果,或者感谢他们的投票。如果不给出那个特定的错误,就很难,有时甚至不会被问题用户注意到。

        2
  •  12
  •   David    16 年前

    如果您使用IP地址,那么您将限制大多数公司只有一个投票权,因为它们通过防火墙或代理服务器路由所有出站Internet流量。几年前我们做了这个,发现所有的AOL流量都来自5个IP地址。

        3
  •  4
  •   Amber    16 年前

    一般来说,是的,您要做的是为投票创建一个数据库表,并简单地存储choice+ip地址—然后在插入时,执行db查询,查看给定IP中是否已经存在一个条目。

    这个 理想的 解决方案是将选票与用户帐户联系起来,而用户帐户又与更具体的存在联系在一起(例如信用卡、手机或其他不太容易增加的身份来源)。

    你到底在问什么问题?

        4
  •  2
  •   Dan Bair    16 年前

    我一直这样做的方法是将用户代理和IP地址连接到MD5哈希(在某些情况下,这将允许来自同一IP的人投票,只要他们使用不同的浏览器),并将其存储为投票数据库的“指纹”,并向其添加唯一的密钥。正如IPX阿瑞斯所说,从那里你可以捕捉到重复的密钥异常,你应该是好的。

    如果你想让人们一天投票一次,你也可以把YMD附加到“指纹”上,或者其他的变体,以允许每小时X个数量或者每天X个数量。

        5
  •  1
  •   Andrejs Cainikovs    16 年前

    是的,使用数据库。不要依赖cookie,它们很容易被删除。
    到目前为止,基于IP的发声限制是最好的选择。

        6
  •  0
  •   Joh    16 年前

    IP地址有其局限性,正如我们从上面所指出的,但是浏览器还有许多其他的特性,这些特性可以抑制有害的选民。例如,browserid对于几乎每个浏览器都是不同的。您可以使用browserid和ip地址的组合来创建唯一的ID。

        7
  •  0
  •   complistic    12 年前

    另一种避免作弊的“帮助”方法是在表单中提供一次使用哈希,然后在计算投票之前检查它是否有效。

    例如:

    当您创建投票表单时,您会创建一个随机散列并将其存储在数据库中,然后将其放入 form 作为一个 hidden 字段。 (可能要将日期字段添加到哈希数据库,您可以清除未使用的哈希)

    当你有投票权的时候 POST 请求您可以检查所提供的哈希是否在数据库中,并将其从数据库中删除,以便不能再次使用。


    欺骗:
    如果投票页具有高流量,则可能使用高IO加载数据库。
    无法将网页缓存为计划HTML,因此会给Web应用程序带来更多压力。

    推荐文章