所以这基本上是一种保证,就散列/加盐而言,我正在正确地进行整个注册/登录过程。
我有一个用户表,其中包含密码、盐、 token 字段(显然还有其他字段,但这是最重要的)。注册后,它会生成一个随机盐和一个随机 token ,并将其放入密码字段中:
hash("sha256", $theirpostpassword.$randomgeneratedsalt);
随机生成的盐和 token 存储在表中用户行的各自字段中。
因此,在登录时,我仅从用户行中使用他们指定的用户名选择盐。然后我对有多少行的帖子密码与他们的特定 salt 连接进行了计数查询,然后我将它们登录。很确定我已经记下了那部分。
现在我想在每个页面上验证他们的登录,我会在每个页面上运行一个函数来检查他们的 cookie 以查看 id-username-token 的格式是否与数据库中的行匹配。这意味着每次登录都会使用这些凭据设置他们的 cookie。
现在我唯一能想到的让它变得更好的方法就是在每次有效登录时更改 token ?
感谢您的见解。
最佳答案
是的,您绝对应该在每次登录时更改 token 。否则,被盗一次的代币就是永远被盗的帐户。用户希望注销通过使他们的 cookie 或其他数据无效来保护他们的 session 免受攻击。
token 不是随机的,您可以通过用户 ID、 session 到期时间和 cookie 中您想要的任何其他内容的哈希生成它,加上盐(就像登录系统)。这种盐不一定来自数据库,但它可以。它可能是一个硬编码的字符串(我认为有时称为“胡椒”)。如果 cookie 已过期,请记住将 cookie 视为无效。这就是 token 应该是签名的原因,以确保他们没有欺骗该数据。
关于php - 散列和加盐 - 使用/cookie 验证登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599255/