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

时间:2009-07-13 19:04:47

标签: security passwords identity

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

最初,我打算让用户选择一个安全问题(来自5个列表)并提供答案。如果他们进入了忘记密码页面,他们就必须输入他们的登录ID,以及他们的安全问题的答案。这似乎有点不安全,因为这些类型的问题(母亲的婚前姓,出生城镇等)的答案通常并不难获得。

以下是我的一些问题:

  • 安全问题是解决此问题的最佳方法吗?
  • 如果是,那么最好的问题是什么?
  • 用户需要输入多少问题才能输入答案?
  • 是否需要在忘记密码页面上放置CAPTCHA?
  • 用户生成自己的问题会更好吗?

非常感谢有关此事的任何帮助/评论/文献。

3 个答案:

答案 0 :(得分:1)

我无法回想起这个位置,但是如果你在基于知识的身份验证上进行谷歌搜索,你就会认为Q& A身份验证非常弱。一个重要问题是潜在答案和实际答案的熵(可能的随机性)。如果你想要一个喜欢的颜色,那么大多数用户都会选择一个非常小的颜色列表。这可能值1位熵。然后,如果你问第二个问题,比如你长大的城市,这可能会让你得到另外一两个熵(在墨西哥,对于这个答案,3个城市中每个城市都有30%的机会)。 / p>

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

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

祝你好运!

答案 1 :(得分:0)

  

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

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

  
      
  • 如果是,那么最好的问题是什么?
  •   
  • 用户生成自己的问题会更好吗?
  •   

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

  

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

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

  

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

嗯,必须有一些防范蛮力攻击的尝试,特别是机器人攻击。我会使用SO使用的相同技术:reCAPTCHA

答案 2 :(得分:0)

  

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

绝对不是。

密码恢复需要对合法用户有效,而对于坏人则必须失败。秘密问题则相反:黑客确实擅长猜测,但是合法用户却无法记住自己的答案。 Research has proven this。这正是NIST is saying do not use secret questions -- i.e. knowledge based authentication的原因。

您正在尝试使用户忘记密码时更轻松,但是不幸的是,秘密问题却相反。用户讨厌它们,而他们却忘记了答案,这只会使用户更加沮丧。

根据设计,当用户忘记密码时,您将无法恢复帐户。不要通过使用秘密问题来使情况更糟。如果您确实希望使密码恢复成为可能,那么为什么不强迫用户选择并回答秘密问题,而不是要求用户提供电子邮件地址或电话号码并以与所有优质网站完全相同的方式重置密码,为什么呢?它吗?