进行密码重置的“完成”方式似乎如下:
zs8Abn27
)/password_reset?t=zs8Abn27
我的问题是,如果黑客获得对您的数据库的读/写访问权限,他们是否只能创建自己的令牌,并以这种方式获得访问权限?即使他们只是具有读访问权限,他们也可以使用他们可以看到的令牌来获得临时访问权。
为了记录,这完全是概念性的,我只是好奇你如何才能使这样的功能安全。
答案 0 :(得分:1)
阅读Everything you ever wanted to know about building a secure password reset feature。
是的,有权访问数据库的人可以创建自己的令牌,但他们也可以将密码重置为他们喜欢的任何东西(假设他们知道使用的散列算法)。此外,他们可以随时创建新帐户,提升权限或执行任何其他恶意任务。
假设如果数据库遭到破坏,您就会遇到规模问题,这使得重置令牌的访问变得无关紧要!
答案 1 :(得分:0)
您对所需流程的描述是正确的。
如果黑客可以访问您的数据库,那么所有都会被清除。你应该努力确保这是不可能的。
答案 2 :(得分:0)
嗯,首先,不仅仅是因为这个问题,我们需要确保黑客不违反数据库并获得读/写访问权。
另一种方法是将令牌存储在数据库中,而不是存储在文件系统中。在一个不可读但仅由网络服务器用户访问的文件夹中,.htaccess
保护访问权限,并由cron
定期清除,因此令牌过期相对较快。这样,负责密码恢复的代码将检查此文件,而不是数据库。
但又一次,这也是可以破解的。
答案 3 :(得分:0)
另外,我们已经说过,您可以在将令牌存储到您的数据库之前对其进行散列,但是在将其邮寄给用户之后。