繁体   English   中英

如何在数据库和Cookies中存储密码(PHP / MySQL)

[英]How to Store Passwords in Databases and Cookies (PHP/MySQL)

读完这篇文章和其他许多人在那里如何存储在数据库和饼干密码,我现在不知道我应该怎么办呢?

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

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

然后,我将(UserName,HashedPw,Salt)存储在数据库中,但是我对cookie采取什么措施(以识别在会话期满后仍希望保持打开状态的用户)?

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

为了记住用户在cookie中的登录,您有两个选择:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM