我目前负责设置一个轮询系统(使用PHP)。
现在为了尽可能安全和客观,访客只能投票一次非常重要。我正在考虑通过访问者的IP来验证民意调查(一个IP只能进行一次投票),并且可能会进行验证码测试以确保一旦他们因某些原因通过了IP验证就没有机器人可以进入
所以它是唯一的IP验证和验证码。但这够了吗?单个用户是否有可能通过使用代理或其他我不知道的方式来更改他/她的IP,并使用唯一的IP多次投票?
有更好的方法吗?最好没有验证码。
提前致谢。
答案 0 :(得分:5)
如果用户在公共投票系统中投票一次,则无法确定无法确定,无需登录。
由于某些原因,检查IP并不是一个好主意。如其他答案中所述,许多网络都在一个ip后面,用户可以使用另一台具有不同IP的电脑并再次投票。
<强>的OpenID 强>
使用OpenId识别用户并检查他们是否已经投票。
注册用户
如果他们没有openid帐户,您可以选择允许用户注册。
实施一个安全的系统,会话欺骗,以及多次投票,变得困难read this
答案 1 :(得分:3)
您无法创建100%安全的投票系统。
但您可以使用自动预过滤器+管理员作为后置过滤器工作流程进行尝试:
此解决方案的一大缺点是需要管理员。但是 - 我认为 - 没有完美的解决方案。
答案 2 :(得分:3)
除非您要求CA验证身份,否则您无法确定每个人只投票一次。这当然是完全矫枉过正,所以真正的问题是:如何使多票更难。
如果您要使用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地址。如果用户来自许多用户使用的网络工作怎么办?