因此,我正在为我的node.js web框架编写一个用户/身份验证系统。
从可用性或安全性的角度来看,我应该关注哪些边缘情况?
发布于 2010-11-05 10:35:24
密码必须使用单向散列算法在数据库中进行散列。这使您不必知道他们的密码。选择正确的算法是很重要的。由于存在多个漏洞,MD5被认为是不安全的。SHA1并没有像MD5那样被证明是不安全的,但理论上它被认为是脆弱的。最好是过渡到SHA2或SHA256。政府要求在2010年底之前使用SHA2。
http://en.wikipedia.org/wiki/MD5
密码应该加盐。这可以防止字典攻击您的密码。通过组合一个随机的信息片段,意味着攻击者无法获取一堆单词,并逐个尝试它们,以查看您的系统中哪些散列匹配。
http://en.wikipedia.org/wiki/Salt_(cryptography
密钥强化有助于对抗弱密码,因为弱密码会损害系统的安全性。您可以使用散列算法迭代1000次,以提高暴力破解密码的复杂性。
http://en.wikipedia.org/wiki/Key_strengthening
确保您的用户通过https为web应用程序提交其登录信息。否则,他们将以明文形式提交密码。不要试图用Javascript变得聪明。只需使用https即可完成。
你必须权衡可用性和隐私。使用电子邮件地址而不是用户名真的很好,因为它很容易记住,但如果你有一个社交网站,人们不会喜欢你发布他们的电子邮件地址。有时接受用户名或电子邮件地址是很好的。
您需要考虑的另一件事是您的用户将如何保持登录到您的系统。会话、cookie等。会话很简单,但如果您的站点有数百万用户,它们可能会变得昂贵。您可以使用memcache或Java中过多的分布式缓存之一来存储它们。然而,其他替代方案正在使用HMAC。记住,与单向散列不同,HMAC有一个必须在服务器上保护的私钥。如果您选择使用HMAC+cookies来标识用户,请采取步骤使用某种形式的对称加密来保护私钥。也有一个drop dead date,HMAC在过去不能使用。HMAC应该只在固定的时间长度内有效。你的软件必须强制这样做。不要依赖cookie超时来为您完成此操作。
其他要考虑的事情是使用OpenID,因为它真的可以帮助你的用户访问你的网站,而不必经历注册过程。我有一个android应用程序,我不要求他们预先注册帐户,但如果他们选择使用某些功能,我会要求他们注册。而且,通过不强制用户登录,用户的留存率要高得多。人们在注册过程中放弃。
确保应用程序中的方法强制某人在执行之前进行身份验证。在调用方法之前,您需要有一种方法强制所有方法调用通过应用程序的一部分,如果它们未通过身份验证,则将它们重定向到登录。试着记住他们要去的页面。
还有其他的,但我不能完全确定这就是你要找的。祝你好运,和谷歌一起做一点关于安全的研究是值得的。
发布于 2010-11-05 10:53:40
常见的边缘情况:
人们忘记了passwords.
https://stackoverflow.com/questions/4103003
复制相似问题