如何以安全的方式记住用户的cookie?

时间:2011-05-15 19:08:17

标签: security session-cookies

所以,假设我有一个会员基础网站,当用户登录时,我把一个cookie(或一个会话)与一个键值对记住用户是谁。但它只是让我注意我应该使用哪些信息来记住用户以确保其安全。我不能使用username = username或user_id = user_id(因为我的user_id将是1),因为人们可以简单地猜测cookie值是什么并以该用户身份登录。那么我应该使用什么键/值对来识别用户并仍然安全地将他们的信息连接到数据库?感谢。

4 个答案:

答案 0 :(得分:1)

如果您因任何原因不喜欢加密,那么更简单的解决方案可能是使用GUID来识别用户。这样,黑客就必须对您的应用程序发起拒绝服务攻击,以便能够运行甚至很小一部分GUID。

如果你想正确地做到这一点,那么你也应该看看http://jaspan.com/improved_persistent_login_cookie_best_practice

答案 1 :(得分:1)

Ben,您需要关注几种不同类型的攻击。例如,简单地使用私钥加密标识符并不会阻止可以拦截加密值的人简单地将其重播到您的服务器(并且看起来是用户)。此处详细介绍了一些常见的安全风险(以及本页底部的相关链接):

https://www.owasp.org/index.php/Session_hijacking_attack

会话管理可能非常复杂,并且根据您所需的安全级别,您不希望自己解决这个问题,因为您的开发环境/框架可能已经拥有一个比自制解决方案更经过审查的解决方案。这是一个详细说明需要考虑的事情的链接,不幸的是,这个主题比简单的Stack Overflow帖子更多:

https://www.owasp.org/index.php/Session_Management

答案 2 :(得分:1)

我绝对不是安全方面的专家,但我最近实施了用户管理工具,并且我已经完成了以下工作。

  • 不要使用加密,它的速度很慢,大部分时间都是简单的实现,这只是浪费时间。

以下是您需要存储在服务器上的内容 - 以便对每个请求进行身份验证。

  • UserId(显而易见)
  • CookieHash(由userId制作,一些秘密私钥和加密随机生成的号码)
  • LastLogin
  • SessionRenewed(对于何时取消某人的会话很有用,例如每10分钟更新一次cookieHash,否则退出用户)
  • LastIP

我在cookie中存储的内容是

  • 用户ID
  • CookieHash

如何使用此基本安全性

只需在用户登录时检查用户名/密码等(通常情况下)如果一切正常,请登录用户并生成新的cookiehash并填写上面给出的值。

每个请求都会针对其哈希检查UserId。如果有人给UserId = 4但哈希没有匹配,则自动删除会话并将用户转发到登录屏幕。可能的日志很好地看到人们尝试用你的努力工作的频率。

我希望这会有所帮助。

答案 3 :(得分:0)

您只需使用保留在服务器上的私有加密密钥加密用户ID即可。使用这种方法有几点需要注意:

  • 每次调用服务器都需要您解密cookie以获取用户的ID。这将增加每个请求的开销。
  • 如果密钥遭到破坏,您将被迫放弃您使用的cookie的当前名称,并在分配新的cookie名称时使用另一个加密密钥;这当然会导致用户不得不重新登录。

虽然我不认为这些是主要障碍,但它们可能对您而言,您必须自己评估对您网站的影响。