这个用户是否足够安全?

时间:2015-06-17 13:45:52

标签: php security authentication hash

我正试图摆脱使用md5()来存储和比较密码。所以我想开始使用password_hash()。

现在,我以前是这样做的,我会在他们的会话或cookie中存储用户名和密码的md5(如果他们选择"记住我"),然后检查数据库查看是否有任何用户存在该用户名和密码为md5&d;密码。我意识到这不是很安全,这就是为什么我要阻止它。

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

所以我的问题是,如果我存储一个哈希"会话ID"和#34;令牌"在用户表中,当用户成功登录,然后将其与用户ID一起存储在人员会话/ cookie中以便检查数据库时,这是否足够安全?当我说哈希"会话ID"和#34;令牌"我的意思是sha256&甚至md5'随机大数字的哈希......

示例:

用户登录 - >哈希"会话ID"和#34;令牌"存储在用户cookie /会话中,并使用散列"会话ID"更新数据库中的行。和#34;令牌"。

用户访问网站 - >代码检查他们的"会话ID"和#34;令牌"基于浏览器会话/ cookie变量存在于数据库中。如果是,则假定找到的行代表当前用户。

非常感谢任何见解。

2 个答案:

答案 0 :(得分:1)

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

当用户再次登录时,您必须确保删除表格行,但如果用户在多个设备上设置记住我,则会导致问题,因此我设置了过期表中的每个id的日期,登录脚本将:

  1. SELECT * FROM' UNIQIDS' WHERE $ current_date_and_time> ' EXPIRE'并删除所有结果
  2. 检查是否存在cookie。如果有,并且它与uniqid匹配,则在计算机上创建会话,否则显示登录页面
  3. 用户登录时:

    1. 检查表中是否已存储uniqid
    2. 如果存储了一个,如果当前日期和时间超过其过期日期,则删除该行
    3. 如果已过期,则生成一个新的过期日,其新的过期日期与您生成的cookie的到期日期相匹配。如果没有过期,请计算从现在到它到期的时间之间的时间,并创建一个包含其值并在您计算的时间内到期的cookie。
    4. 这是非常安全的,因为很难伪造这个cookie,并且它也没有将用户密码信息传递给客户端机器。

      为了更加安全,你可以md5你生成的uniqid,但没有真正需要,因为它不包含重要信息。

      这是相当复杂的,但如果你一步一步,那就不可能了。

      祝你好运!

答案 1 :(得分:0)

为了获得最佳密码哈希值和使用效果,并且编码简单,请参见以下示例...

$salts= ['cost' => 12]; password_hash("Password", PASSWORD_BCRYPT, $options);

$salts是一个数组,它在使用password_hash()时结合了多次。

PASSWORD_BCRYPT是一个算法,用“$ 2y $”标识符和blowfish加密算法散列字符串。这会输出60个混乱的字符串。