php - 散列和加盐 - 使用/cookie 验证登录

标签 php authentication cookies hash salt

所以这基本上是一种保证,就散列/加盐而言,我正在正确地进行整个注册/登录过程。

我有一个用户表,其中包含密码、盐、 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/

相关文章:

php - 如何重定向 artisan 修补程序输出?

php - 使用 Dreamweaver 上传图像文件时出错

php - 在 MYSQL 中使用哪个子句代替 IN 子句

php - laravel-5.4 - 错误 :Creating default object from empty value

python - 尝试将 cookie 从字典加载到请求 session 中

javascript - 为午夜过期的 cookie 编写 Javascript

python - scrapy 不通过 POST 请求发送 Cookie

php - 一个连接可以获取另一个连接的详细信息吗?或者,我怎样才能获得最详细的待处理交易报告?

python - 如何将此代理切换为使用代理身份验证?

php - 如何改进我的用户登录方案