我一直在研究在mysql中存储用户密码,普遍的答案是使用像MD5或SHA1这样的加密算法来存储它。但是,如果用户x忘记了她的密码并希望将其发送给她,该怎么办呢?然后呢?我不能把md5散列发给她!这个问题在现实世界中是如何处理的?有两个数据库吗?一个用来比较哈希,另一个用来比较忘记的密码?但有什么不同呢?当时连接到它的sql用户都是只读的。那么你是怎么做的呢?谢谢!!
发布于 2012-11-09 22:36:48
这是非常标准的安全实践,从不向用户发送他们的密码。相反,您提供了一个密码重置实用程序,该实用程序与用户访问其电子邮件帐户能力和/或回答有关其配置文件的问题(如安全问题或他们居住的邮政编码)的能力相关。
功能概述:
<代码>G213
发布于 2012-11-09 22:35:07
最好的解决方案是向用户发送一个链接,用户可以在其中输入新密码,而不必输入忘记的密码。
这个链接应该只工作一次,并且它应该只工作几个小时。
不要创建新密码并通过邮件发送;用户会忍不住想使用该密码(忽略已通过不安全通道传输的事实)。
发布于 2012-11-09 23:45:48
您说得对,密码不应以纯文本(they should be hashed)格式存储,因此不能发送给忘记密码的用户。
从本质上讲,您需要的是一种绕过常规身份验证方案的方法,您应该首先意识到这种机制是应用程序的后门。
通常假设只有所需的用户才能访问发送到您的应用程序中注册的电子邮件地址的电子邮件。“标准”密码重置机制就是基于这个假设的。以下是我对此的看法:
,则将
- respond to the form submission with a page which says something along the lines of "**if** the address submitted was registered then a reset email has been sent"
- If the submitted address was not one registered with the application then do nothing but respond to the submission with a page which says something along the lines of "**if** the address submitted was registered then a reset email has been sent" - just the same as if the address was a valid one (this is to make it more difficult for someone to discover email addresses registered with the application)
这不是一个完美的方案。这是安全性和便利性之间的权衡,毫无疑问,它构成了应用程序的后门。对于低价值的应用程序,它通常已经足够好了。
进一步阅读:
https://stackoverflow.com/questions/13309960
复制相似问题