设置安全的轮询系统

时间:2009-03-27 11:47:43

标签: php validation

我目前负责设置一个轮询系统(使用PHP)。

现在为了尽可能安全和客观,访客只能投票一次非常重要。我正在考虑通过访问者的IP来验证民意调查(一个IP只能进行一次投票),并且可能会进行验证码测试以确保一旦他们因某些原因通过了IP验证就没有机器人可以进入

  1. 所以它是唯一的IP验证和验证码。但这够了吗?单个用户是否有可能通过使用代理或其他我不知道的方式来更改他/她的IP,并使用唯一的IP多次投票?

  2. 有更好的方法吗?最好没有验证码。

  3. 提前致谢。

6 个答案:

答案 0 :(得分:5)

如果用户在公共投票系统中投票一次,则无法确定无法确定,无需登录。

由于某些原因,检查IP并不是一个好主意。如其他答案中所述,许多网络都在一个ip后面,用户可以使用另一台具有不同IP的电脑并再次投票。

<强>的OpenID

使用OpenId识别用户并检查他们是否已经投票。

注册用户

如果他们没有openid帐户,您可以选择允许用户注册。

实施一个安全的系统,会话欺骗,以及多次投票,变得困难read this

答案 1 :(得分:3)

您无法创建100%安全的投票系统。

  • 如果它基于注册/ IP / cookie,则用户可以创建新用户/获取另一台PC /删除所有cookie。

但您可以使用自动预过滤器+管理员作为后置过滤器工作流程进行尝试:

  • 使用Cookie(或IP /浏览器属性/等)自动过滤来防止多次投票
  • 在管理员视图中,管理员可以根据IP或子网地址手动解析和删除 投票。这也不是一个完美的解决方案,但是通过一些好的查询(同一时间内从同一个IP /子网进行相同的投票),管理员可以轻松删除可疑的投票。

此解决方案的一大缺点是需要管理员。但是 - 我认为 - 没有完美的解决方案。

答案 2 :(得分:3)

除非您要求CA验证身份,否则您无法确定每个人只投票一次。这当然是完全矫枉过正,所以真正的问题是:如何使多票更难。

  • 包含验证码的电子邮件。恕我直言,但取决于你想要多么确定。
  • 使用会话来查看投票的人。显然不是100%安全,但会停止99%的人。
  • 使用cookie来查看投票的人。像上面一样,一些人会知道如何删除cookie。
  • 使用POST,忽略GET。
  • 使用上述2或3的组合。

如果您要使用IP进行验证,请不要只使用 REMOTE_ADDR ,并与整个 X-Forwarded-For 结合使用。这样您就不会阻止通过相同代理连接的人。

答案 3 :(得分:2)

不要采用独特的Ip方式。有很多情况下很多用户拥有相同的ip(即意大利isp fastweb,大公司等)。此外,如果用户有动态IP,它可以在每次他喜欢的时候改变它自己的IP地址......

最好的方法之一应该是使用电子邮件地址和cookie。用户可以多次投票(你无法避免这种情况),但至少每次投票需要一些时间。

答案 4 :(得分:1)

对于类似的项目,我做了2次验证...... 我放置了一个cookie,并在服务器上保存了来自用户ip +用户代理的哈希。 这似乎非常有效,因为即使有更多的人使用相同的IP,用户代理的散列也会在大多数情况下不同,因为根据操作系统和安装的其他扩展,它对于相同的浏览器会有所不同。

答案 5 :(得分:0)

没有万无一失的防止多票的方法。检查cookie是另一种选择。

关于验证IP地址。如果用户来自许多用户使用的网络工作怎么办?