2009-07-13 90 views
3

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

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

因此,这里是我的一些问题:

  • 是安全问题,解决这个问题最好的办法?
  • 如果是这样,那么最好的问题是什么?
  • 用户需要输入多少个问题才能输入答案?
  • 是否需要在忘记密码页面上输入验证码?
  • 用户生成自己的问题更好吗?

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

回答

2

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

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

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

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

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

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

是否需要在忘记密码页面上输入验证码?

那么,必须有一些企图防范强力攻击,特别是从机器人。我会使用与SO使用的技术相同的技术:reCAPTCHA

0

我记不起位置,但是如果您在基于知识的身份验证中进行了Google搜索,那么您将会发现该问题Q &身份验证功能非常弱。一个重要的问题是潜在答案和实际答案的熵(可能的随机性)。如果您要求最喜欢的颜色,那么大多数用户将只能选择一小部分颜色。这可能值得1比特的熵。然后,如果你问了第二个问题,比如你长大的城市,这可能会让你得到另外一两个熵(在墨西哥,这个答案对于三个城市每个城市都有30%的机会)。

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

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

祝你好运!