(我很惊讶这个问题现在没有在 Stack 上被问到,但是我做了一些搜索并且找不到任何东西 oO)
我正在开发基于服务的 webapp,我想知道处理用户登录的最佳方式是什么。到目前为止,我有:
- 当用户登录时,他们提供信用。密码在本地加盐和散列,而不是通过 POST 传输到服务器(因此嗅探用户将无法检索原始密码,即在其他站点上检查它们)
- 登录和散列密码存储在 cookie 中,TTL 为 15 分钟(每一个 webaction 都被撤销)
- Passwod 在服务器端进行了加盐和哈希处理,并且与存储在数据库中的密码进行了比较(因此,密码使用不同的盐进行了双重哈希处理,这适用于将闯入数据库的人 - 他们仍然无法恢复登录贷记)
- 用户每 5 分钟最多可以从单个 IP 进行 3 次登录尝试
- 用户获取有关上次成功和不成功登录尝试的信息以及日期和 IP
有人注意到最好在 cookie 中存储唯一的会话 id 而不是散列密码,我想知道为什么它如此重要——如果有人嗅探数据包,而不是不管会话 id 与否——他们仍然可以从登录中获取包含所有数据的数据包需要冒充合法用户并自己登录。那么,与在 cookie 方法中存储登录名和哈希密码相比,存储会话 ID 方法还有其他优点吗?