为什么我应该在cookie中使用会话ID而不是在cookie中存储登录和(哈希)密码?

Pio*_*trK 10 security session login

(我很惊讶这个问题现在没有在Stack上问过,但是我已经做了一些搜索而且找不到任何东西oO)

我正在研究基于服务的webapp,我想知道处理用户登录的最佳方法是什么.到目前为止,我有:

  1. 当用户登录时,他们会提供信用卡.密码在本地进行盐渍和散列,而不是通过POST传输到服务器(因此嗅探用户将无法检索原始密码,即在其他网站上检查密码)
  2. 登录和散列密码存储在cookie中,TTL为15分钟(每个webaction都被撤销)
  3. Passwod是服务器端腌制并再次散列,而不是与存储在数据库中的密码进行比较(因此,密码是用不同的盐进行双重散列,这适用于那些会闯入数据库的人 - 他们仍然无法恢复登录信用)
  4. 用户每5分钟最多可以从单个IP进行3次登录尝试
  5. 用户可以获得有关上次成功和不成功登录尝试以及日期和IP的信息

有人注意到最好在cookie中存储唯一的会话ID而不是哈希密码,我想知道为什么它如此重要 - 如果有人嗅探数据包,而不管会话ID是否 - 他们仍然可以从登录中获取包含所有数据的数据包需要伪装成合法用户并自行登录.那么存储会话ID方法还有什么其他优点,而不是在cookie appraoach中存储登录和哈希密码?

roo*_*ook 11

将散列密码存储为cookie是非常讨厌的漏洞,并且是OWASP违规.哈希密码的全部意义在于您强制攻击者破解哈希以便登录.如果攻击者只能从数据库中提取哈希值然后登录,那么您的系统相当于以纯文本格式存储密码.

每个平台都有一个会话处理程序,在php中只使用session_start()和$ _SESSION超全局.通过编写自己的会话处理程序,您的安全性会降低.

  • @PiotrK它仍然是一个可怕的想法,不要编写自己的会话处理程序. (3认同)

mga*_*aia 5

通过存储会话ID,您可以识别同一用户的不同会话,并且您可能希望以任何特殊方式处理它们(例如,只允许单个会话,或者具有与会话相关联而不是与用户相关联的数据).

并且您可以轻松区分不同会话中的活动,因此如果您将其保留在计算机中,则可以在不更改密码的情况下终止会话,其他会话不会发现差异.