我想为登录用户实现一个简单的记住我,因此他们将在关闭浏览器后保持登录状态。所以我在想创建一个包含由UUID.randomUUID生成的唯一密钥的cookie,并在服务器端将其映射到用户名。
这足够安全吗?有什么风险?我应该采取预防措施来防止黑客尝试随机密钥吗?
我正在考虑使用像spring security或apache shiro这样的身份验证框架,但我找不到他们给我的任何好处(我不需要复杂的访问控制,只需要用户注册/登录)。我错过了安全方面的重要内容吗?
更新
我想我的问题实际上是:像spring和shiro这样的框架是否做了一些更复杂的东西,以便记住我产生的安全性,我可能无法匹敌?
答案 0 :(得分:1)
Spring安全性提供声明性安全性。我假设您正在为您的应用程序使用spring框架。 Spring安全性和Spring框架通常提供了灵活性,直到需要时才能实现。我一直处于感谢Spring的情况,需要无法预料的定制。
Spring安全性允许您轻松地插入身份验证模型 - 基于数据库,基于LDAP等。如果您想使用一个,它提供一个默认登录页面,根据访问的URL提供登录页面的重定向,并允许用户继续验证完成后的URL以及更多的东西,这会减少要写入的样板代码量。它还提供了Remember Me的实现。 http://static.springsource.org/spring-security/site/docs/3.0.x/reference/remember-me.html。但是,需要详细考虑安全问题。
Spring安全本身不会提供更好的实现来记住我。但是,我认为可以考虑它提供的其他优势。
答案 1 :(得分:0)
让我们从“如何记住我的功能有效?”的答案开始。 spring-security和shiro都有类似记住我的服务实现。他们将加密主题保存在cookie中,然后通过此cookie对用户进行身份验证。这意味着服务器使用标头Set-Cookie:<character sequence>
向客户端发送响应,然后客户端发送带有标头Cookie:<character sequence>
的请求。
现在假设我们想要登录某人帐户:
结论:如果用户通过记住我的服务进行身份验证,则永远不要执行高度敏感的操作。如果需要,请使用https。使用暴力防御。想想加密。