Security Web应用程序中安全问题的最佳实践

Security Web应用程序中安全问题的最佳实践,security,passwords,identity,Security,Passwords,Identity,我正在开发一个web应用程序,不管你信不信,用户注册时不需要提供他们的电子邮件地址。这些要求不能改变。用户将使用id和密码登录系统,就像任何标准网站一样。我面临的问题与忘记密码的用户有关。当他们想要生成一个新的时,我如何验证他们的身份 最初,我打算让用户选择一个安全问题(从5个列表中)并提供答案。如果他们曾经进入忘记密码页面,他们将不得不输入他们的登录id,以及他们的安全问题的答案。这似乎有点不安全,因为这类问题(母亲的婚前姓、出生地等)的答案通常不难获得 下面是我的一些问题: 安全问题是解决

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

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

下面是我的一些问题:

  • 安全问题是解决此问题的最佳方法吗
  • 如果是,最好的问题是什么
  • 用户需要输入多少个问题的答案
  • 是否有必要在忘记密码页面上添加验证码
  • 用户生成自己的问题是否更好
对此问题的任何帮助/评论/文献都将不胜感激

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

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

  • 如果是,最好的问题是什么
  • 用户生成自己的问题是否更好
与库存的“第一辆车”或“第一只宠物”相比,让用户自己写问题会容易得多。这是一个很好的故障保护,因为它(通常)提供了一个很难随机猜测的问题/答案组合,并且可能与密码一样保密

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

允许一个问题/答案组合

是否有必要在忘记密码页面上添加验证码


嗯,必须有一些努力来防范暴力攻击,特别是来自机器人的暴力攻击。我会使用与SO相同的技术:

我记不起位置,但如果你在谷歌搜索基于知识的身份验证,你会发现Q&a身份验证非常弱。一个重要的问题是潜在答案和实际答案的熵(可能的随机性)。如果你要一个最喜欢的颜色,实际上只有一个非常小的颜色列表,大多数用户会选择。这可能相当于一点熵。然后,如果你问第二个问题,比如你成长的城市,这可能会让你得到一点或两点熵(在墨西哥,三个城市中的每一个都有30%的机会得到这个答案)

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

也就是说,您可以做其他事情来联系用户。您可以尝试向用户发送文本消息,而不是电子邮件-用户是否注册了电话号码?您可能会让用户在其计算机上存储一个证书,他们可以将其与密码重置请求一起上载(您必须努力确保此证书已绑定到计算机)。你可以做一个post注册,用户可以提交一个电子邮件地址

祝你好运

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

绝对不是。

密码恢复需要对合法用户有效,而对坏人无效。秘密问题恰恰相反:黑客真的很擅长猜测,但合法用户却记不起自己的答案。这就是原因

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


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

胡说八道。密码提示也是如此。如果黑客比原始用户更擅长解决问题,那么你会让黑客更容易,让合法用户更难:因此,你让问题变得比根本没有密码重置更糟糕。用户需要留下某种类型的联系人(电子邮件、手机号码等)来重置密码。同意,这是目前的最佳做法。然而,这个问题明确指出,提供电子邮件地址是不可能的,而这个限制在几年前写这个问题时是非常常见的。