记住我的功能+其他安全问题

时间:2013-04-16 20:15:37

标签: java spring-security shiro

我想为登录用户实现一个简单的记住我,因此他们将在关闭浏览器后保持登录状态。所以我在想创建一个包含由UUID.randomUUID生成的唯一密钥的cookie,并在服务器端将其映射到用户名。

这足够安全吗?有什么风险?我应该采取预防措施来防止黑客尝试随机密钥吗?

我正在考虑使用像spring security或apache shiro这样的身份验证框架,但我找不到他们给我的任何好处(我不需要复杂的访问控制,只需要用户注册/登录)。我错过了安全方面的重要内容吗?

更新

我想我的问题实际上是:像spring和shiro这样的框架是否做了一些更复杂的东西,以便记住我产生的安全性,我可能无法匹敌?

2 个答案:

答案 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>的请求。

现在假设我们想要登录某人帐户:

  1. 我们可以使用受害者的电脑。 (所以永远不要表演 如果用户通过记忆进行身份验证,则操作非常敏感 我的服务)。这也可以应用于用户名密码 会话未完成时验证(浏览器打开)和 受害者去吃午饭。
  2. 我们可以分析http流量来检索Cookie标头,然后进行签名 在使用此标头。 (因此您可以使用https来阻止流量 分析)。这也可以应用于用户名密码 认证
  3. 我们可以尝试随机键(你可以使用一些暴力过滤器) 结合一些复杂的主题编码算法)。这个可以 也适用于用户名密码验证。
  4. 结论:如果用户通过记住我的服务进行身份验证,则永远不要执行高度敏感的操作。如果需要,请使用https。使用暴力防御。想想加密。