3

我正在开发一个网络应用程序——不管你信不信——用户不需要提供他们的电子邮件地址来注册。这些要求不能改变。用户将使用 ID 和密码登录系统,就像任何标准网站一样。我面临的问题与忘记密码的用户有关。当他们想要生成一个新的时,我如何验证他们的身份?

最初,我打算让用户选择一个安全问题(从 5 个列表中)并提供答案。如果他们曾经进入忘记密码页面,则必须输入他们的登录 ID,以及他们的安全问题的答案。这似乎有点不安全,因为这类问题(母亲的娘家姓、出生地等)的答案通常并不难获得。

所以这是我的一些问题:

  • 安全问题是解决此问题的最佳方法吗?
  • 如果是这样,最好的问题是什么?
  • 用户需要输入多少个问题的答案?
  • 是否有必要在忘记密码页面上放置验证码?
  • 用户自己提出问题会更好吗?

任何关于此事的帮助/评论/文献将不胜感激。

4

3 回答 3

1

我不记得位置了,但是如果您对基于知识的身份验证进行谷歌搜索,您会发现问答身份验证非常弱。一个重要的问题是潜在答案和实际答案的熵(可能的随机性)。如果您要求一种最喜欢的颜色,那么大多数用户会选择的颜色列表实际上非常少。这可能值 1 位熵。然后,如果您问第二个问题,例如您长大的城市,这可能会让您再获得一两个熵(在墨西哥,这个答案的 3 个城市中的每一个都有 30% 的机会)。

我看到的一个估计是,要获得与 8 个字符密码相同的强度,您需要大约 26 个问题。

也就是说,您也许可以做其他事情来联系用户。您可以尝试向用户发送短信而不是电子邮件 - 用户是否注册了电话号码?您可能让用户在他们的计算机上存储一个证书,他们可以将其与密码重置请求一起上传(您必须努力确保该证书与计算机相关联)。您可能会做一个注册后的事情,用户可以提交一个电子邮件地址。

祝你好运!

于 2009-07-16T05:28:47.380 回答
0

安全问题是解决此问题的最佳方法吗?

由于您不能使用任何其他身份验证方式(例如电子邮件地址、OpenID 等),因此这是您能做的最好的事情。但是,您始终可以在注册过程中添加“密码提示”。

  • 如果是这样,最好的问题是什么?
  • 用户自己提出问题会更好吗?

如果你让用户写他/她自己的问题而不是股票“第一辆车”或“第一只宠物”,这会容易得多。这是一个很好的故障保护,因为它(通常)提供了一个非常困难的问题/答案组合来随机猜测,并且可能与密码一样秘密。

用户需要输入多少个问题的答案?

允许一个问题/答案组合。

是否有必要在忘记密码页面上放置验证码?

好吧,必须采取一些措施来防范蛮力攻击,尤其是来自机器人的攻击。我会使用 SO 使用的相同技术:reCAPTCHA

于 2009-07-13T20:02:53.777 回答
0

安全问题是解决此问题的最佳方法吗?

绝对不。

密码恢复需要对合法用户有效,对坏人无效。秘密问题则相反:黑客非常擅长猜测它们,但合法用户却无法记住自己的答案。 研究证明了这一点。这正是NIST 说不要使用秘密问题的原因——即基于知识的身份验证

您试图让用户在忘记密码的情况下更容易,但不幸的是,秘密问题恰恰相反。用户讨厌他们,他们忘记了他们的答案,这只会让用户更加沮丧。

按照设计,当用户忘记密码时,您无法恢复帐户。不要使用秘密问题使情况变得更糟。如果您真的想让密码恢复成为可能,那么为什么不强迫用户选择和回答秘密问题,而是要求他们提供电子邮件地址或电话号码,并像所有优秀网站一样进行密码重置它?

于 2018-09-08T20:16:22.123 回答