有没有办法让一个相当安全的系统在无需登录的情况下进行投票。我现在使用 cookie 来设置该人是否已投票,并将用户 ip 插入数据库中。
如果该用户删除了他的 cookie,他将能够再次投票。这就是为什么我检查用户的 ip 是否存在于数据库中,以及该 IP 是否在最后 30 秒内投票。这样他就必须删除他的 cookie 并更改他的 IP 地址才能再次投票。
我知道对此没有 100% 的防故障解决方案,但有没有更安全的方法来做到这一点?
有两种方法可以改善您的结果,但如果您需要,请自行阅读和判断:
有Evercookie 项目,它在很多地方存储了类似 cookie 的信息。它比普通 cookie 更难删除。
我个人认为这个项目应该被认为是一个概念证明,实际使用它是不道德的
您可以使用浏览器指纹识别,而不是仅仅查看 IP 地址来识别回访者。EFF 通过他们的Panopticlick 项目表明,浏览器版本、操作系统版本、已安装的附加组件等的组合通常是独一无二的。Piwik 网络分析工具也使用这种用户启发式方法来区分访问者。我不知道实现,但它是 FOSS 和 PHP,所以你应该能够找到那部分。
您可以同时使用这两种解决方案 - 但它仍然不是很安全。您可以阻止子网投票 (192.168.1.xxx) 以防止动态 IP 更改,但随后您也阻止了多达 254 人投票 - 它不会阻止代理。
我见过很多使用的一种方法是让它看起来像你允许重复投票。即:在最终用户端显示他们的重复投票已被计算在内,但实际上并没有在您自己的数据库中计算它。
但实际上,登录系统大约是唯一相对“安全”的方式——但如果有人足够坚定,那显然也可以被玩弄。
希望这可以帮助。
您可以为用户代理做广告(在短时间内,两个冲浪者完全相同的机会通常很小:https ://panopticlick.eff.org/index.php?action=log&js=yes )但是再次'如果有人足够坚定,这显然也可以玩。