当我继续构建越来越多的网站和Web应用程序时,我经常被要求存储用户的密码,如果/当用户有问题时(通过电子邮件发送忘记的密码链接,通过电话等),当我可以时,我强烈反对这种做法,我做了很多“额外”的编程,使密码重置和管理帮助成为可能,而无需存储他们的实际密码。
当我无法对抗它(或无法获胜)时,我总是以某种方式对密码进行编码,以便它至少不会作为明文存储在数据库中-尽管我知道如果我的数据库被黑客入侵,罪魁祸首破解密码不会花费太多时间,所以这让我不舒服。
在一个完美的世界里,人们会经常更新密码,而不是在许多不同的网站上重复密码——不幸的是,我认识很多人都有相同的工作/家庭/电子邮件/银行密码,甚至在他们需要帮助的时候免费给我密码。
在道德和伦理上,我觉得有责任保护可能是什么,对于一些用户来说,他们的生计,即使他们对待它的尊重要少得多。我敢肯定,有很多途径的方法和参数要盐哈希和不同的编码选项,但是否有一个单一的“最佳实践”,当你必须存储它们?在几乎所有的情况下,我使用PHP和MySQL,如果这使我应该处理细节的方式有任何不同。
关于Bounty的更多信息
我想澄清,我知道这不是你想做的事情,在大多数情况下,拒绝这样做是最好的。然而,我不是在寻找一个关于采取这种方法的优点的讲座--我是在寻找如果你确实采取这种方法,可以采取的最佳步骤。
在下面的注释中,我指出,主要面向老年人、智障人士或非常年轻的人的网站在被要求执行安全密码恢复程序时可能会让人感到困惑。尽管我们可能会发现在这些情况下很简单,但一些用户需要额外的帮助,要么让服务技术人员帮助他们进入系统,要么让他们通过电子邮件/直接向他们显示系统。
在这样的系统中,如果用户没有获得这种级别的访问帮助,这些人口统计数据的流失率可能会阻碍应用程序,因此请记住这样的设置来回答。
感谢大家
这是一个有趣的问题,有很多争论,我很喜欢它。最后,我选择了一个答案,既保留了密码安全性(我不必保留纯文本或可恢复的密码),也使我指定的用户群能够登录到一个系统,而没有我从正常密码恢复中发现的主要缺点。
像往常一样,有大约5个答案,我想标记为正确的原因不同,但我必须选择最好的一个-其余的都得到了+1。谢谢大家!
另外,感谢Stack社区中为这个问题投票并/或将其标记为收藏夹的每个人。我认为获得100票是一种恭维,并希望这次讨论帮助了其他和我一样关心这个问题的人。