【问题标题】:Password security in sessions会话中的密码安全
【发布时间】:2015-07-23 21:38:42
【问题描述】:

我们不使用纯文本密码,而是使用具有高计算成本和随机盐的强哈希函数来阻止彩虹攻击等。

但是当用户在会话中时,通常他或她的用户名连同他们的密码哈希一起存储为 cookie 以验证会话。如果用户的浏览器cookie空间被泄露,攻击者不是更容易获得破解用户名+会话哈希的目标吗,而不是用户名+密码哈希?

例如,在 Django 中,密码使用 PBKDF2 或 bcrypt 进行散列,但会话散列使用不太复杂的 HMAC 并且没有随机盐。这是一个安全问题吗?如果是,处理会话的正确方法是什么?

【问题讨论】:

    标签: session authentication cookies hash passwords


    【解决方案1】:

    对于每个会话,我建议使用专用的 SessionID - 随机长 128 位值。并且,将会话密钥保留为:

    username:SessionID:hash
    

    在哪里

    hash = sha1(SessionID|username|client_IP|secret_server_side_password);
    

    每次收到cookie时,都需要重新计算hash,并与收到的比较。

    因此,会话关闭后,此 cookie 无用(SessionID 不匹配)。 此外,如果 cookie 从活动会话中被盗,服务器可以 找出来自另一台计算机的窃取 cookie 的攻击,因为来自真实客户端的 client_IP 将与实际 client_IP 不同。

    当然,如果ClientIP改变了,会话会自动断开。

    替代方案 - 使用身份验证系统,基于客户的 SSL 证书,例如 - emcSSL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 2012-03-18
      • 2017-10-08
      • 2017-10-15
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多