【发布时间】:2015-09-02 19:14:54
【问题描述】:
我正在尝试放弃使用 md5() 来存储和比较密码。所以我想开始使用password_hash()。
现在,我以前是怎么做的,我会将用户名和密码的 md5 存储在他们的会话或 cookie 中(如果他们选择“记住我”),然后检查数据库以查看是否存在任何用户使用该用户名和 md5 密码。我意识到这不是很安全,这就是为什么我想阻止它。
我不能再这样做了,因为 password_hash() 总是改变,所以我不能在他们的会话中存储一个哈希然后在数据库中检查它,因为我需要对未哈希的密码使用 password_verify。
所以我的问题是,如果我在用户成功登录时将散列的“会话 ID”和“令牌”存储在用户表中,然后将其与用户 ID 一起存储在个人会话/cookie 中,以便检查数据库,这是否足够安全?当我说散列的“会话 ID”和“令牌”时,我的意思是随机大数的 sha256'd 甚至 md5'd 散列......
例子:
用户登录 -> 哈希“会话 ID”和“令牌”存储在用户 cookie/会话中,并且他们在数据库中的行使用哈希“会话 ID”和“令牌”更新。
用户访问站点 -> 代码根据浏览器会话/cookie 变量检查他们的“会话 ID”和“令牌”是否存在于数据库中。如果是,则假定找到的行代表当前用户。
任何见解将不胜感激。
【问题讨论】:
-
您可以使用加盐密码哈希。
-
@PraveenD - password_hash() 已经生成了一个加盐哈希......你到底在暗示什么?
-
盐应该是随机的。
-
@PraveenD - password_hash() 生成一个加盐的散列,其中盐是随机的,每个散列已经...... OP 已经意识到这一点,也许如果你解释了你的意思
-
静态盐完全抵消了使用密码哈希开始的效果。如果我打算这样做,我还不如坚持使用 md5()。
标签: php security authentication hash