【问题标题】:How to Store Passwords in Databases and Cookies (PHP/MySQL)如何在数据库和 Cookie 中存储密码 (PHP/MySQL)
【发布时间】:2010-12-03 14:40:46
【问题描述】:

阅读了this article 和其他许多关于如何在数据库和 cookie 中存储密码的文章,我现在想知道 如何我应该这样做.. .

到目前为止,我想出的是(在阅读了一下之后)获取明文用户密码,用盐填充它直到它填满 512 位(64 字节 => 64 字符,因为页面不是-unicode),然后做

$pwhash = hash('sha512', $saltedpw);
for ($i=0; $i<1000; $i++)
      $pwhash = hash('sha512', $pwhash);

然后我将 (UserName, HashedPw, Salt) 存储在数据库中,但是我该如何处理 cookie(以识别希望在会话过期后保持 loogend-on 的用户)?

【问题讨论】:

  • 不要将其存储在 cookie 中!这是没有必要的。最好使用随机令牌进行身份验证。
  • 那不是很危险吗? (如果随机令牌与另一个令牌发生冲突,则用户将登录到其他人的帐户)
  • @Buttercup:随机令牌仅用于身份验证,不用于识别。但是如果你从足够大的取值范围中选择随机令牌,那么发生冲突的概率就可以忽略不计了。
  • 而且,当然,您可以在分配之前检查令牌是否不冲突,如果冲突,则生成另一个随机的。

标签: php mysql database cookies hash


【解决方案1】:

在数据库中只存储密码哈希码,cookie 应该包含会话 id,通常称为SID。在另一个表中存储所有SID(带有userID),仅此而已。 但是不要忘记 PHP 已经内置了非常简单和有用的会话 api,使用它更好:)

【讨论】:

    【解决方案2】:

    您不必将用户的密码存储在 cookie 中。您可以生成存储在数据库和 cookie 中的长随机字符串(类似于 sessionid)。每次会话到期并且用户回来时,您都可以更改该字符串。当用户访问该站点时,您可以根据数据库检查 cookie 值并查看用户是谁。

    【讨论】:

      【解决方案3】:

      首先,调用hash 1000 次无济于事,一次就足够了。

      要记住 cookie 中的用户登录信息,您有两种选择:

      1. 如前所述,您可以生成一个随机令牌并将其与用户信息一起存储在数据库中。当没有会话 cookie 的用户进入站点时,您检查是否有带有令牌的 cookie 并进行数据库查找。如果您找到了具有此类令牌的用户,请将其登录。您可能需要进行一些额外的检查,例如当前 IP 是否与他们首次登录时的 IP 相同。
      2. 您可以将用户 ID 存储在 cookie 中,但是您必须使用密钥对数据进行签名,以确保用户不能只是修改它。 HMAC-SHA-1 是一个很好的方法。优点是您不必在数据库中存储任何其他数据。您只需验证签名并查找用户 ID。缺点是您必须确保签名代码是安全的(具有较长密钥的 HMAC-SHA-1 应该这样做)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-27
        • 2022-10-19
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        • 2019-03-17
        相关资源
        最近更新 更多