为了账号安全,请及时绑定邮箱和手机立即绑定

在以后的明文检索中,我应该如何从道德上处理用户密码存储问题?

/ 猿问

在以后的明文检索中,我应该如何从道德上处理用户密码存储问题?

在以后的明文检索中,我应该如何从道德上处理用户密码存储问题?

随着我继续构建越来越多的网站和web应用程序,我经常被要求存储用户的密码,如果/当用户出现问题时,可以检索它们(或者通过电子邮件发送忘记的密码链接,通过电话遍历它们等等)。当我可以的时候,我很痛苦地反对这种做法,我做了很多‘额外’的编程,使密码重置和管理协助成为可能,而不存储他们的实际密码。

当我无法抵抗它(或无法获胜)时,我总是以某种方式对密码进行编码,这样它至少不会以明文形式存储在数据库中-尽管我知道,如果我的数据库被黑了,罪魁祸首就不会破译密码了,这让我感到不舒服。

在一个完美的世界里,人们会频繁地更新密码,而不会在许多不同的网站上重复密码-不幸的是,我认识很多人,他们有着相同的工作/家庭/电子邮件/银行密码,甚至在他们需要帮助的时候也会免费提供给我。如果我的DB安全程序因某种原因而失败,我不想为他们的财务崩溃负责。

在道义上和道德上,我觉得有责任保护一些用户的生计,即使他们对待它的尊重要少得多。我确信有许多方法和论点可以用于盐渍散列和不同的编码选项,但是当您必须存储它们时,是否有单一的“最佳实践”呢?在几乎所有的情况下,我都在使用PHP和MySQL,如果这对我处理细节的方式有什么不同的话。

Bounty的补充信息

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

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

在这样的系统中,如果用户没有得到这种级别的访问帮助,这些人口学中的消耗率可能会使应用程序陷入困境,所以请记住这样的设置。

感谢大家

这是一个有趣的问题,有很多的辩论,我很喜欢它。最后,我选择了这样一个答案,即两者都保留密码安全性(我不需要保留纯文本或可恢复的密码),但也使我指定的用户群能够登录到系统中,而不存在我在正常密码恢复中发现的主要缺点。

像往常一样,我希望有5个答案是正确的,因为不同的原因,但是我必须选择最好的答案-所有的答案都是+1。谢谢大家!

另外,感谢Stack社区中的每一个投票支持这个问题并/或将其标记为最受欢迎的人。我认为获得100张选票是一种恭维,并希望这次讨论能帮助到与我同样关心的其他人。


查看完整描述

3 回答

?
潇潇雨雨

对这个问题采取另一种方法或角度如何?问为什么密码必须是明文的:如果它是为了让用户能够检索密码,那么严格地说,您实际上不需要检索他们设置的密码(他们根本不记得密码是什么),您需要能够给他们一个密码-他们能用.

想想看:如果用户需要检索密码,那是因为他们忘记了密码。在这种情况下,新密码与旧密码一样好。但是,目前常用的密码重置机制的缺点之一是,在重置操作中生成的密码通常是一串随机字符,因此用户很难简单地输入正确的密码,除非它们复制-n粘贴。对于不那么精明的计算机用户来说,这可能是个问题。

解决这一问题的一种方法是提供或多或少是自然语言文本的自动生成密码。虽然自然语言字符串可能没有相同长度的随机字符串所具有的熵,但是没有什么可以说明自动生成的密码只需要有8个(或10个或12个)字符。通过将几个随机单词串在一起,得到一个高熵的自动生成的密码(在它们之间留出一个空格,这样就可以识别并被任何能阅读的人输入)。6个不同长度的随机词可能比10个随机字符更容易正确地键入,并且具有较高的熵。例如,从大写、小写、数字和10个标点符号(总共有72个有效符号)随机抽取的10个字符密码的熵为61.7位。使用一本包含7776个单词的字典(如Diceware所用),可以随机选择一个6个单词的密码,密码的熵为77.4位。见Diceware常见问题想了解更多信息。

  • 一个大约有77位熵的密码:“承认散文诗的急功近利”

  • 一个大约有74位熵的密码:“K:&$R^TT~QKD”

我知道我更喜欢输入这个短语,并且使用复制-n粘贴,这个短语也同样容易使用密码,所以不会丢失密码。当然,如果您的网站(或任何受保护的资产)不需要77位熵来自动生成密码,那么生成更少的单词(我相信您的用户会很感激)。

我理解这样的论点,即有些受密码保护的资产实际上没有很高的价值,因此破解密码可能不是世界末日。例如,我可能不会在意我在不同网站上使用的80%的密码是否被破坏了:所有可能发生的事情就是有人在我的名下发垃圾邮件或张贴一段时间。那不是件好事,但他们不会闯进我的银行账户。然而,考虑到许多人在他们的网站上使用的密码与他们对银行账户(可能还有国家安全数据库)使用的密码相同,我认为最好还是把那些“低价值”密码作为不可恢复的密码来处理。


查看完整回答
反对 回复 2019-07-11
?
慕的地8271018

假设有人委托建造了一座大型建筑-比如说,一个酒吧-下面的对话发生了:

建筑师: 对于这样的建筑规模和容量,你将需要这里和这里的消防出口。
客户: 不,这是太复杂和昂贵的维护,我不想要任何侧门或后门。
建筑师: 先生,消防通道不是任选的,而是根据城市的消防法规规定的。
客户: 我不是付钱给你争论的。照我说的做。

建筑师会问如何在没有防火出口的情况下以道德的方式建造这座建筑吗?

在建筑和工程行业,谈话的结尾很可能是这样的:

建筑师: 这座建筑物没有出口就建不了。你可以去找其他有执照的专业人士,他也会告诉你同样的事情。我要走了,准备好合作时再打电话给我。

计算机编程可能不是领有执照专业,但人们似乎常常想知道,为什么我们的职业没有得到与土木或机械工程师一样的尊重-嗯,不要再看下去了。这些职业,当被赋予垃圾(或完全危险的)要求时,会简单地拒绝。他们知道这不是一个借口说:“好吧,我尽力了,但是他坚持说,我必须照他说的去做。”他们可能会因为这个借口被吊销执照。

我不知道您或您的客户是否是任何公开交易公司的一部分,但是以任何可恢复的形式存储密码会导致您无法通过几种不同类型的安全审核。问题不在于那些访问你数据库的“黑客”恢复密码有多困难。绝大多数安全威胁都是内部的。你需要防范的是一些心怀不满的员工拿着所有的密码走开,然后卖给出价最高的人。使用非对称加密并将私钥存储在单独的数据库中绝对不会阻止这种情况;总会有有人访问私有数据库,这是一个严重的安全风险。

没有以可恢复的形式存储密码的合乎道德或负责任的方法。期间。


查看完整回答
反对 回复 2019-07-11
?
潇湘沐

您可以用公钥加密密码+SALT。对于登录,只需检查存储的值是否等于从用户输入+SALT中计算出来的值。如果有一段时间,密码需要恢复为纯文本,您可以手动或半自动地用私钥解密。私钥可以存储在其他地方,并且还可以对称加密(然后需要人工交互来解密密码)。

我认为这实际上有点类似于Windows恢复代理起作用了。

  • 密码是加密的
  • 人们可以在不解密明文的情况下登录。
  • 密码可以恢复为明文,但只能使用私钥,该私钥可以存储在系统之外(如果您愿意的话,可以保存在银行安全中)。


查看完整回答
反对 回复 2019-07-11

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信