gpt4 book ai didi

php - 此用户身份验证是否足够安全?

转载 作者:搜寻专家 更新时间:2023-10-31 21:30:05 25 4
gpt4 key购买 nike

我正在尝试不再使用 md5() 来存储和比较密码。所以我想开始使用 password_hash()。

现在,我过去是怎么做的,我会在他们的 session 或 cookie 中存储用户名和密码的 md5(如果他们选择“记住我”),然后检查数据库以查看是否存在任何用户使用该用户名和 md5 密码。我意识到这不是很安全,这就是我想阻止它的原因。

我不能再这样做了,因为 password_hash() 总是在变化,所以我不能在他们的 session 中存储哈希值,然后在数据库中检查它,因为我需要对未经哈希处理的密码使用 password_verify。

所以我的问题是,如果我在用户成功登录时在用户表中存储散列的“ session ID”和“ token ”,然后将其与用户 ID 一起存储在个人 session /cookie 中,以便检查数据库,这足够安全吗?当我说散列的“ session ID”和“ token ”时,我的意思是随机大数的 sha256 或什至 md5 散列...

例子:

用户登录 -> 散列的“session id”和“token”存储在用户 cookies/session 中,他们在数据库中的行更新为散列的“session id”和“token”。

用户访问网站 -> 代码检查他们的“ session ID”和“ token ”是否存在于基于他们的浏览器 session /cookie 变量的数据库中。如果是,则假定找到的行代表当前用户。

如有任何见解,我们将不胜感激。

最佳答案

我要做的是当用户登录时,使用 uinqid() ( http://php.net/uniqid ) 为他的登录生成一个唯一 ID,然后将其存储在一个新表中。然后 Id 检查此表以查看 cookie 是否与存储在表中的 uniqid 匹配。

你必须确保当用户再次登录时表行被删除,但如果用户在多个设备上设置记住我,这会导致问题,所以我会在表中设置一个过期日期对于每个 ID,登录脚本将:

  1. SELECT * FROM 'UNIQIDS' WHERE $current_date_and_time > 'EXPIRE' 并删除所有结果
  2. 检查 cookie 是否存在。如果有并且匹配uniqid,在电脑上创建一个session,否则显示登录页面

用户登录时:

  1. 检查表中是否已经存在uniqid
  2. 如果有一个存储,如果当前日期和时间超过其过期日期,删除该行
  3. 如果该 cookie 已过期,则生成一个新的,其新的到期日期与您正在生成的 cookie 的到期日期相匹配。如果尚未过期,请计算从现在到过期时间之间的时间,并创建一个包含其值并在您计算的时间内过期的 cookie。

这是高度安全的,因为很难伪造此 cookie,并且它永远不会将用户密码信息传递给客户端计算机。

为了更加安全,您可以对您生成的 uniqid 进行 md5,但没有真正的必要,因为它不包含任何重要信息。

这很复杂,但如果你一步一步来,应该不是不可能的。

祝你好运!

关于php - 此用户身份验证是否足够安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30893507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com