php - 散列 "remember me"cookie token 的最佳方法

标签 php cookies hash remember-me bcrypt

我正在尝试实现“记住我”功能,遵循此处提供的指南:The definitive guide to form-based website authentication ,这里:http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/

“cookie token ”似乎在存储在数据库中时应该经过哈希处理(如果攻击者可以访问数据库,未哈希的 token 看起来像普通的登录名/密码,允许登录网站)。

在寻找一个好的哈希算法时,我发现了使用 bcrypt 的推荐技术:https://stackoverflow.com/a/6337021/488666

我已经尝试过了,发现建议的轮数 (15) 导致处理时间非常慢(在 Intel Core 2 Duo 上哈希 2,3s + 验证 2,3s E8500 + 4 GB 内存)

我知道散列算法应该相对较慢才能阻止攻击者,但在那个级别上,它会妨碍用户使用该网站:)

您认为更少的轮数(例如 7 轮,这会将处理时间降低到 10 毫秒 + 10 毫秒)就足够了吗?

最佳答案

引用 The definitive guide to form-based website authentication :

DO NOT STORE THE PERSISTENT LOGIN COOKIE (TOKEN) IN YOUR DATABASE, ONLY A HASH OF IT! The login token is Password Equivalent, so if an attacker got his hands on your database, he could use the tokens to log in to any account, just as if they were cleartext login-password combinations. Therefore, use strong salted hashing (bcrypt / phpass) when storing persistent login tokens.

我同意第一个加粗的句子,但不同意最后一个。

如果我没记错的话,“强加盐哈希”算法的目的是在给定彩虹表的情况下,某人不应该能够检索密码

但在这里,哈希字符串不是密码而是随机字符串。因此,任何彩虹表都不太可能检索任何最初散列的字符串。我什至猜想我可以简单地使用一个基本的 hash('sha256', $randomString) 来调用它,目的是让数据库和 cookie 中的 token 具有不同的值。

关于php - 散列 "remember me"cookie token 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8502972/

相关文章:

php - 在偏移处添加字符串?

php - 访问 "CSS"中的全局变量(style.php)

node.js - 在 Express/Connect 中解析签名 cookie 的便捷方法?

hash - 如何从 []bytes 获取十六进制

ruby-on-rails - 与另一个嵌套哈希相比,从嵌套哈希中查找丢失的键

php - Doctrine 不跟踪实体中某些字段的更改

php - 使用 PHP 和 MySQL 写博客

Python请求登录403

javascript - 如何以 unicode 编码保存 cookie 值

javascript - 对象属性作为哈希函数中的键值对