2009-08-07 105 views
6

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

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

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

+2

你的问题是什么? – Nate 2009-08-07 19:57:14

+2

代理服务器和dyanmic ip地址的存在破坏了您的计划。 – 2009-08-07 19:57:22

+0

但总比没有好。 – Amber 2009-08-07 19:58:00

回答

18

我建议不要采用IP方法。当我看到这一点之前,你的一些大型ISP重复使用IP很多(AOL ...),但如果你确实使用IP地址,那么使用数据库来跟踪它们。一个快速的方法是将其作为一个独特的关键,并将异常看作“已投票”。添加

一件好事并不表明其表决不计入用户,只显示结果,或感谢他们的投票。通过不给出具体的错误,它是更难,有时甚至没有注意到你的问题用户。

+2

另一件我发现能够很好​​地工作的功能...如果用户拥有cookie,则会为用户添加一个递增的延迟时间。当然,他们可以删除它,但再次,并没有表明你实际上在做任何事情,只是慢慢地花费更长的时间来投票,每次都会减慢投票脚本的速度,直到他们没有真正工作。 (你可以用IP地址做同样的事情)。 注意:这也是一个很好的用户名/密码技术,而不是锁定帐户。 – RiddlerDev 2009-08-07 20:04:38

+0

我不会自动认为投票脚本将被编程,甚至发布cookie数据。其他然后JavaScript(在浏览器中),我还没有看到任何默认情况下这样做的语言。 ruby,php,python似乎都会让你手工添加cookie头部到一个请求。 – complistic 2013-03-05 04:57:28

1

是的,使用数据库。不要依赖cookies,他们可以很容易地删除。
国际海事组织,迄今为止,基于IP的语音限制是最好的选择。

+0

-1对于基于IP的阻塞:不幸的是,互联网上有许多非常重要的站点,其中有许多用户位于单一IP之后。 – 2009-08-07 20:37:34

+0

是的,但唯一的工作方式,如果你想压制投票作弊。 – 2009-08-07 20:42:53

+0

@AndrejsCainikovs:在所有情况下,我们都使用IP地址作为补充选项,作弊者始终拥有取之不尽用之不竭的用武之地。所以 - 这可能会帮助我的孩子兄弟。这并不坏;但请记住,这只是针对低挂果实的临时措施,而不是一个完整的解决方案。 – Piskvor 2014-10-13 12:16:14

4

一般来说,是的,你会怎么做是对的选票数据库表,并且只存储选择+ IP地址 - 然后在插入时,做一个DB查询,看是否已经进入与给定的IP存在。

理想解决方案将是,以配合票对后者又连接到更具体的存在(例如,信用卡,蜂窝电话,或其他不太容易倍增身份源)的用户帐户。

你问的是什么问题?

12

如果你使用的IP地址,那么你就大多数企业通过防火墙或代理服务器限制到只有一票,因为他们路由所有出站互联网流量。几年前我们做了这个,发现所有的AOL流量都来自5个IP地址。

+0

你还有问题与美国在线以及呃? – RiddlerDev 2009-08-07 20:00:43

0

IP地址有其局限性,正如我们从上面提到的那样,但浏览器还有很多其他特性可能会阻碍不合理的选民。例如,BrowserID就几乎每个浏览器都有所不同。您可以使用BrowserID和IP地址的组合来创建唯一的ID。

2

我总是这样做的方式是将用户代理和IP地址连接成MD5散列(在某些情况下,这将允许来自同一IP的用户投票,只要他们使用不同的浏览器),并存储作为投票数据库的“指纹”,并为其添加一个唯一的密钥。正如IPX Ares所说,从那里你可以捕获重复的关键异常,并且你应该很好。

如果你想要让人们投票,每天一次,你也可以在YMD追加到“指纹”,或其他变化,让x量每天一小时或x量。

+1

这可以改进一点,但仍然不足以解决企业用户的问题。在一家公司中,很可能有很多人拥有相同的用户代理并且位于显示为一个IP地址的防火墙后面。 – 2012-09-06 14:37:23

0

另一种方式来“帮助”避免作弊是提供1次用散到窗体,然后检查,如果这是有效的你算在投票前。

例如:

当您创建的投票表格,你做一个随机哈希值,并将其存储在数据库中,并把它放在form作为hidden场。 (可能要日期字段添加到哈希数据库,你可以清理未使用的哈希值)

然后,当你得到一个票POST要求,您可以检查提供的散列是在数据库中删除从数据库,所以它不能再次使用。


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