7

我真正想要的是限制每人 1 票,但我能想到的下一个最好的事情是限制每个 IP 地址 1 票,以防止恶意用户/黑客严重破坏我公司的投票系统。我正在考虑使用数据库来跟踪 IP 地址。

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

谢谢。我认为,就我而言,最好不要限制每个 IP 地址 1 票。

4

7 回答 7

21

我建议不要使用 IP 方法。当我在您的一些大型 ISP 大量重用 IP(AOL ...)之前查看此内容时,但如果您确实使用 IP 地址,请使用数据库来跟踪它们。一种快速的方法是使其成为唯一键并将异常捕获为“已投票”。

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

于 2009-08-07T20:00:08.430 回答
12

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

于 2009-08-07T19:59:13.173 回答
4

一般来说,是的,你要做的是有一个用于投票的数据库表,并简单地存储选择+IP地址 - 然后在插入时,进行数据库查询以查看是否已经存在具有给定 IP 的条目。

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

你问的问题到底是什么?

于 2009-08-07T19:57:24.690 回答
2

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

如果您想让人们每天投票一次,您还可以将 Ymd 附加到该“指纹”或其他变体以允许每小时 x 数量或每天 x 数量。

于 2009-08-27T16:37:45.997 回答
1

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

于 2009-08-07T19:56:56.517 回答
0

正如我们在上面提到的,IP 地址有其局限性,但浏览器还有许多其他特性可以阻止淘气的选民。例如,几乎每个浏览器的 BrowserID 都是不同的。您可以使用 BrowserID 和 IP 地址的组合来创建唯一 ID。

于 2009-08-12T20:01:30.860 回答
0

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

例如:

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

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


缺点:
如果投票页面有高流量,可能会以高 IO 加载数据库。
无法将页面缓存为计划 html,因此会给 Web 应用程序带来更多压力。

于 2013-03-05T05:12:24.260 回答