在以后的明文检索中,我应该如何从道德上处理用户密码存储问题?
随着我继续构建越来越多的网站和web应用程序,我经常被要求存储用户的密码,如果/当用户出现问题时,可以检索它们(或者通过电子邮件发送忘记的密码链接,通过电话遍历它们等等)。当我可以的时候,我很痛苦地反对这种做法,我做了很多‘额外’的编程,使密码重置和管理协助成为可能,而不存储他们的实际密码。
当我无法抵抗它(或无法获胜)时,我总是以某种方式对密码进行编码,这样它至少不会以明文形式存储在数据库中-尽管我知道,如果我的数据库被黑了,罪魁祸首就不会破译密码了,这让我感到不舒服。
在一个完美的世界里,人们会频繁地更新密码,而不会在许多不同的网站上重复密码-不幸的是,我认识很多人,他们有着相同的工作/家庭/电子邮件/银行密码,甚至在他们需要帮助的时候也会免费提供给我。如果我的DB安全程序因某种原因而失败,我不想为他们的财务崩溃负责。
在道义上和道德上,我觉得有责任保护一些用户的生计,即使他们对待它的尊重要少得多。我确信有许多方法和论点可以用于盐渍散列和不同的编码选项,但是当您必须存储它们时,是否有单一的“最佳实践”呢?在几乎所有的情况下,我都在使用PHP和MySQL,如果这对我处理细节的方式有什么不同的话。
Bounty的补充信息
我想澄清的是,我知道这不是你想要做的事情,在大多数情况下,拒绝这样做是最好的。然而,我并不是在寻找关于采取这种方法的好处的讲座,我在寻找最好的步骤,如果你真的采取这种方法的话。
在下面的说明中,我指出,主要针对老年人、智障或非常年轻的网站在被要求执行安全密码恢复程序时,可能会使他们感到困惑。尽管在这种情况下,我们可能会发现它很简单,但有些用户需要额外的帮助,要么让服务技术帮助他们进入系统,要么通过电子邮件/直接向他们展示。
在这样的系统中,如果用户没有得到这种级别的访问帮助,这些人口学中的消耗率可能会使应用程序陷入困境,所以请记住这样的设置。
感谢大家
这是一个有趣的问题,有很多的辩论,我很喜欢它。最后,我选择了这样一个答案,即两者都保留密码安全性(我不需要保留纯文本或可恢复的密码),但也使我指定的用户群能够登录到系统中,而不存在我在正常密码恢复中发现的主要缺点。
像往常一样,我希望有5个答案是正确的,因为不同的原因,但是我必须选择最好的答案-所有的答案都是+1。谢谢大家!
另外,感谢Stack社区中的每一个投票支持这个问题并/或将其标记为最受欢迎的人。我认为获得100张选票是一种恭维,并希望这次讨论能帮助到与我同样关心的其他人。