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



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

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

  1. 当用户登录时,他们会提供信用。密码是在本地腌制的,而不是通过帖子传输到服务器(因此,嗅探用户将无法检索原始密码,即在其他网站上检查它们)
  2. 登录密码存储在cookie中,TTL为15分钟(撤销每个网络action)
  3. passwod是服务器端腌制并再次被哈希,并且与存储在数据库中的密码相比(因此,密码用不同的盐进行了双Hashs,这是针对那些会闯入数据库的人 - 他们仍然不会是能够恢复登录信用)
  4. 用户最多可以从单个IP进行每5分钟的登录尝试
  5. 用户获得有关最后一次成功和失败的登录尝试的信息,以及日期和IP

有人指出,在cookie中存储唯一的会话ID而不是Hashed密码更好,我想知道为什么它如此重要 - 如果某人嗅探数据包,那么无论是否session ID,他们仍然可以从登录中获取数据包借助合法用户并登录自己所需的所有数据。因此

将哈希密码存储为cookie是非常讨厌的脆弱性,并且是违规的。哈希密码的全部要点是,您正在强迫攻击者打破哈希片以登录。如果攻击者只能从数据库中提取哈希,然后登录,那么您的系统等同于在纯文本中存储密码。

每个平台都有一个会话处理程序,在PHP中,只需使用session_start()和$ _Session Super Global即可。通过编写自己的会话处理程序,您将不太安全。

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

,您可以区分不同的活动与不同的会话,因此,如果将密码放在计算机中,则可以杀死会话而无需更改密码,而其他会话不会注意到差异。

<。

double哈希并不能保护您免受漏洞的影响。如果一个人从cookie中获取存储的用户ID并将密码发送到服务器,他将立即获得访问权限。使用会话ID,它至少会超时。

最新更新