2011-05-15 45 views
4

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

回答

1

本,有几种不同类型的攻击需要关注。例如,简单地用私钥加密标识符不会阻止可以截取加密值的人将其简单地重播到服务器(并且看起来是用户)。一些常见的安全隐患都在这里详述(和相关链接,在此页面底部):

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

会话管理可以说是相当复杂的,这取决于安全性您需要的水平,这是不是你想要的东西来解决你自己,因为可能你的开发环境/框架已经有了一个比自制解决方案更受审查的解决方案。这里是一个链接,详细说明一些事情要考虑,遗憾的是这个主题具有比简单的堆栈溢出后更给它:

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

+0

thx输入虐待检查这些链接 – Ben 2011-05-15 20:07:58

0

您可以使用您保存在服务器上的私有加密密钥来加密用户标识。使用此方法需要注意以下几点:

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

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

+0

关于你的第一点:*'每次调用服务器都需要你解密cookie'*,不一定。该应用程序也可以检查会话cookie,如果不存在则回退到解密加密的cookie。所以开销会是每个会话一次解密。另外值得一提的是,应用程序应该忽略基于cookie的敏感操作登录(如更改密码),并要求提供密码。 – 2011-05-15 19:25:29

1

如果你不喜欢以任何理由进行加密,那么更简单的解决方案可能是使用GUID来标识用户。这样,黑客就不得不在你的应用程序上发起一种拒绝服务攻击类型的攻击,即使只有很小一部分GUID也能运行。

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

1

我绝对不是在安全方面的专家,但我最近实现的用户管理工具,我做了以下。

  • 不要使用加密,它的缓慢和大部分时间用于简单的实现只是浪费时间。

以下是您需要在服务器上存储的内容 - 为了验证每个请求。

  • 用户ID(明显)
  • CookieHash(做出来的用户id,一些秘密的私钥和密码随机生成数的)
  • LastLogin
  • SessionRenewed(对于何时取消某人的会话如有用。续约cookieHash每隔10分钟,否则注销用户)
  • LastIP

我存储在cookie被以下

  • 用户ID
  • CookieHash

如何使用这个基本的安全

只要当你用户登录查询用户名/密码等。(只是一般的)如果一切正常,然后登录在用户和生成新的cookiehash并填写上面给出的值。

每个请求都会根据它的散列检查UserId。如果有人给了UserId = 4但哈希不匹配,然后自动删除会话并转发用户登录屏幕。可能的日志很好看,人们试图玩弄你辛勤工作的频率。

我希望这会有所帮助。

+0

如果cookiehash由userId制成,并且攻击知道userId是什么,cookiehash的要点是什么? – Ben 2011-05-15 20:09:02

相关问题