0

进行密码重置的“完成”方式似乎如下:

  1. 生成临时令牌 ( zs8Abn27)
  2. 将令牌与到期时间一起存储在数据库中
  3. 向用户发送电子邮件令牌
  4. 用户前往/password_reset?t=zs8Abn27
  5. 根据数据库检查令牌的有效性
  6. 如果有效用户获得存储在您的数据库中的新密码(当然是加盐和 bcrypted)

我的问题是,如果黑客获得对您的数据库的读/写访问权限,他们是不是只能创建自己的令牌并以这种方式获得访问权限?即使他们只有读取权限,他们也可以使用他们可以看到的令牌来获得临时访问权限。

为了记录,这完全是概念性的,我只是好奇如何使这样的功能安全。

4

4 回答 4

1

阅读有关构建安全密码重置功能的所有信息

是的,有权访问数据库的人可以创建自己的令牌,但他们也可以将密码重置为他们喜欢的任何内容(假设他们知道使用的散列算法)。此外,他们始终可以创建新帐户、提升权限或执行任意数量的其他恶意任务。

假设如果数据库被破坏,您会遇到使访问重置令牌无关紧要的问题!

于 2012-06-03T02:06:54.880 回答
0

此外,您可以在将令牌存储到数据库之前对令牌进行哈希处理,但在将其邮寄给用户之后。

于 2012-06-02T11:01:35.237 回答
0

您对所需过程的描述是正确的。

如果黑客访问了您的数据库,那么一切都会被破坏。你应该努力确保这是不可能的。

于 2012-06-02T10:05:11.700 回答
0

好吧,首先,不仅仅是因为这个问题,我们需要确保黑客不会破坏数据库并获得读/写访问权限。

另一种方法是将令牌不存储在数据库中,而是存储在文件系统中。在一个不可读但只能由网络服务器用户读取的文件夹中,由 保护访问,由.htaccess定期清理cron,因此令牌相对较快过期。这样,负责密码恢复的代码将检查这个文件,而不是数据库。

但再一次,这也是可以破解的。

于 2012-06-02T10:12:34.527 回答