今天我需要设计一个持久的登录系统。我关注过这个博客, http://www.bennadel.com/blog/1213-creating-a-remember-me-login-system-in-coldfusion.htm
基本上按照这篇博客,整个系统包含3个步骤,
如果用户在登录时检查Remember Me
,则用户ID的加密格式将存储在Cookie中。
现在,当用户在会话过期后的1/2天内访问该网站时,将检查Cookie。 如果找到了userid cookie,那么它将被解密并存储在SESSION中以强制登录。
现在在onRequest()
方法SESSION.userid
中检查登录状态。
直到这一切看起来都不错。
但我做的是,我从firefox复制了cookie并用chrome创建了。而现在我能够 在chrome中成功登录该用户。这不是一个很大的安全问题吗?
有人可以建议我们应该采取什么措施来防止这种情况发生?
答案 0 :(得分:2)
是的,这是一个安全风险。
持久登录功能有点像雷区,没有任何东西可以100%抵抗攻击。
您可以通过将持久性Cookie视为单次使用密码来缓解此问题。如果我理解正确,您的系统将散列用户的ID,这意味着cookie将无限期地保持相同的值。相反,它应该是加密强大的随机字符串,在每次认证时都会重新生成。
关于如何最好地处理持久登录有几种思路,我们已经讨论了这个问题many times before。
一些要点:
Cookie本身与密码一样敏感,不应在未经过哈希处理的情况下存储在数据库中。
当用户使用cookie进行身份验证时,您将其从数据库中删除并发布一个新的。
Cookie应该只通过HTTPS发送,这意味着您的整个网站都需要在HTTPS下运行,或者您可以使用第二个 cookie来简单地告诉系统一个安全的持久性cookie存在,并且可以强制重定向到安全页面进行身份验证。
使用持久性Cookie登录的用户仍应对您的系统进行有限的访问。特别敏感的信息或操作仍应锁定在登录挑战之后。
持久性Cookie应仅在固定时间段内有效。这需要多长时间取决于应用程序的敏感性。
我非常建议你做一些关于这个主题的阅读,以了解最佳实践。登录功能非常容易实现,而且正确非常复杂。