Web应用程序中安全问题的最佳实践
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web应用程序中安全问题的最佳实践相关的知识,希望对你有一定的参考价值。
我正在开发一个Web应用程序 - 不管你信不信 - 用户不需要提供他们的电子邮件地址来注册。这些要求不能改变。用户将使用ID和密码登录系统,就像任何标准网站一样。我面临的问题与忘记密码的用户有关。当他们想要生成一个新的,我如何验证他们的身份?
最初,我打算让用户选择一个安全问题(从5个列表中)并提供答案。如果他们进入了忘记密码页面,他们就必须输入他们的登录ID,以及他们的安全问题的答案。这似乎有点不安全,因为这些类型的问题(母亲的娘家姓,出生城镇等)的答案通常并不难获得。
以下是我的一些问题:
- 安全问题是解决此问题的最佳方法吗?
- 如果是这样,最好的问题是什么?
- 输入答案需要用户多少个问题?
- 是否有必要在忘记密码页面上放置CAPTCHA?
- 用户生成自己的问题会更好吗?
任何关于此事的帮助/意见/文献将不胜感激。
安全问题是解决此问题的最佳方法吗?
由于您无法使用任何其他身份验证方式(例如电子邮件地址,OpenID等),因此您可以做到最好。但是,您始终可以在注册过程中添加“密码提示”。
- 如果是这样,最好的问题是什么?
- 用户生成自己的问题会更好吗?
如果你让用户写出他/她自己的问题而不是股票“第一辆车”或“第一辆宠物”,那就容易多了。这是一个很好的故障保护,因为它(通常)提供了一个非常困难的问题/答案组合来随机猜测,并且可能像密码一样秘密。
输入答案需要用户多少个问题?
允许一个问题/答案组合。
是否有必要在忘记密码页面上放置CAPTCHA?
好吧,必须有一些防范暴力攻击的尝试,特别是机器人攻击。我会使用SO使用的相同技术:reCAPTCHA
我无法回忆起这个位置,但是如果你在基于知识的身份验证上进行谷歌搜索,那么你就会认为Q&A身份验证非常弱。一个重要问题是潜在答案和实际答案的熵(可能的随机性)。如果你想要一个喜欢的颜色,那么大多数用户都会选择一个非常小的颜色列表。这可能值1位熵。然后,如果你问第二个问题,比如你长大的城市,这可能会让你获得另外一两个熵(在墨西哥,对于这个答案,三个城市中每个城市都有30%的机会)。
我看到的一个估计是,为了获得与8个字符密码相同的强度,你需要大约26个问题。
也就是说,您可以做其他事情来联系用户。您可以尝试向用户发送短信,而不是电子邮件 - 用户是否注册了电话号码?您可能让用户在他们的计算机上存储证书,他们可以将证书与密码重置请求一起上传(您必须努力确保此证书与计算机绑定)。您可以进行后注册,用户可以提交电子邮件地址。
祝好运!
安全问题是解决此问题的最佳方法吗?
绝对不。
密码恢复需要为合法用户工作,并为坏人失败。秘密问题恰恰相反:黑客非常擅长猜测它们,但合法用户却无法记住自己的答案。 Research has proven this。而这正是NIST is saying do not use secret questions -- i.e. knowledge based authentication的原因。
如果用户忘记密码,您正试图让用户更容易,但不幸的是,秘密问题恰恰相反。用户讨厌他们,他们忘记了答案,这只会让用户更加沮丧。
按照设计,当用户忘记密码时,您无法恢复帐户。不要使用秘密问题使情况变得更糟。如果你真的想让密码恢复成为可能,那么为什么不强迫用户选择和回答秘密问题,而是要求他们提供电子邮件地址或电话号码并重置密码,方法与所有好网站完全相同。它?
以上是关于Web应用程序中安全问题的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章