Security 我应该如何在道德上处理用户密码存储,以便以后进行明文检索?

Security 我应该如何在道德上处理用户密码存储,以便以后进行明文检索?,security,password-encryption,password-storage,Security,Password Encryption,Password Storage,随着我不断构建越来越多的网站和web应用程序,我经常被要求存储用户的密码,以便在用户出现问题时能够检索到这些密码(或者通过电子邮件发送忘记的密码链接,或者通过电话了解这些密码,等等)当我可以的时候,我会极力反对这种做法,我会做很多“额外”的编程,使密码重置和管理协助成为可能,而不必存储他们的实际密码 当我无法与之抗争(或无法获胜)时,我总是以某种方式对密码进行编码,使其至少不会以明文形式存储在数据库中,尽管我知道,如果我的数据库遭到黑客攻击,罪犯破解密码不会花费太多时间,这让我感到不舒服 在一个

随着我不断构建越来越多的网站和web应用程序,我经常被要求存储用户的密码,以便在用户出现问题时能够检索到这些密码(或者通过电子邮件发送忘记的密码链接,或者通过电话了解这些密码,等等)当我可以的时候,我会极力反对这种做法,我会做很多“额外”的编程,使密码重置和管理协助成为可能,而不必存储他们的实际密码

当我无法与之抗争(或无法获胜)时,我总是以某种方式对密码进行编码,使其至少不会以明文形式存储在数据库中,尽管我知道,如果我的数据库遭到黑客攻击,罪犯破解密码不会花费太多时间,这让我感到不舒服

在一个完美的世界里,人们会经常更新密码,不会在许多不同的网站上重复密码。不幸的是,我知道很多人都有相同的工作/家庭/电子邮件/银行密码,甚至在他们需要帮助时免费给我。如果我的DB安全程序因某种原因失败,我不想成为他们财务破产的责任人

从道德和伦理上讲,我觉得有责任保护一些用户的生计,即使他们对待生计的尊重程度大大降低。 我确信有很多方法和参数可以用于satting散列和不同的编码选项,但是当您必须存储它们时,是否有一个“最佳实践”?在几乎所有情况下,我都在使用PHP和MySQL,如果这对我处理细节的方式有任何影响的话

有关赏金的其他信息

我想澄清的是,我知道这不是你想做的事情,在大多数情况下,拒绝这样做是最好的。然而,我不是在寻找一个关于采取这种方法的优点的讲座,我是在寻找如果你真的采取这种方法,最好的步骤

在下面的说明中,我指出,当人们被要求执行安全密码恢复程序时,主要面向老年人、智障者或非常年轻的人的网站可能会让人感到困惑。尽管在这些情况下,我们可能会发现它简单而平凡,但一些用户需要额外的帮助,要么让服务技术人员帮助他们进入系统,要么让他们直接通过电子邮件发送/显示给他们

在这样的系统中,如果用户没有获得这种级别的访问帮助,那么这些人口统计数据的损耗率可能会阻碍应用程序的运行,因此请记住这样的设置

谢谢大家

这是一个充满争议的有趣问题,我很喜欢。最后,我选择了一个既能保持密码安全性(我不必保留纯文本或可恢复密码),又能让我指定的用户群登录到一个系统中,而不存在我从正常密码恢复中发现的主要缺点的答案

像往常一样,由于不同的原因,我想把大约5个答案标为正确答案,但我必须选择最好的一个——其余的答案都是a+1。谢谢大家


此外,还要感谢Stack社区中投票支持此问题和/或将其标记为最喜欢的问题的所有人。我把获得100票作为一种恭维,希望这次讨论能帮助其他人,让他们和我一样关心我。

中途之家怎么样

使用强加密存储密码,并且不启用重置

不重置密码,而是允许发送一次性密码(第一次登录时必须立即更改)。然后让用户更改为他们想要的任何密码(如果他们选择的话,前一个密码)


您可以将其作为重置密码的安全机制进行“销售”。

您可以使用公钥对密码+salt进行加密。对于登录,只需检查存储值是否等于从用户输入+salt计算的值。如果需要以明文形式恢复密码,您可以使用私钥手动或半自动解密。私钥可以存储在其他地方,并且还可以对称加密(这将需要人工交互来解密密码)

我认为这实际上是一种类似的工作方式

  • 密码是加密存储的
  • 人们可以登录而不必解密为明文
  • 密码可以恢复为明文,但只能使用私钥,私钥可以存储在系统外(如果愿意,可以存储在银行保险箱中)

    • 对不起,只要你有办法破解他们的密码,就不可能安全。痛苦地战斗,如果你输了,CYA。

      我认为你应该问自己的真正问题是:“我怎样才能更好地说服别人?”

      不要放弃。你可以用来说服客户的武器是不可抵赖性。如果你可以通过任何机制重建用户密码,你已经给了他们的客户一个合法的不可否认机制,他们可以拒绝任何依赖于该密码的交易,因为供应商无法证明他们没有重建密码并自行完成交易。如果密码被正确地存储为摘要而不是密文,这是不可能的,因为要么是最终客户自己执行了交易,要么是违反了他的注意义务。在这两种情况下,责任都由他承担。我曾经处理过一些案件,这些案件的金额将达数亿美元。这不是你想出错的问题。

      将用户安全问题的答案作为加密密钥的一部分,并且不要将安全问题的答案存储为纯文本(而是散列)

      迈克尔·布鲁克斯(Michael Brooks)对CWE-257的说法相当直言不讳——事实上