2010-11-05 104 views
1

因此,我正在为我的node.js Web框架编写用户/身份验证系统。用户系统的边缘情况

从可用性或安全角度来看,我应该关注哪些边缘案例?

+1

什么是您的操作参数(因此边缘情况?)这个问题非常模糊。你能提供一些关于你正在开发的系统的更多信息吗?例如。你为什么从头开始开发? – davmac 2010-11-05 02:08:59

回答

7

密码必须在数据库中使用单向散列算法进行散列处理。这使您不必知道他们的密码。选择正确的算法很重要。由于多个漏洞,MD5被认为是不安全的。 SHA1还没有被证明是不安全的,因为MD5具有这种不安全性,但它被认为在理论上很弱。最好转换为SHA2或SHA256。 SHA2由政府要求2010年

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并完成它。

你必须权衡可用性与隐私。使用电子邮件地址而不是用户名是非常好的,因为它很容易记住,但如果你有社交网站,人们不会喜欢你发布他们的电子邮件地址。有时候很高兴接受用户名或电子邮件地址。

您需要考虑的另一件事是您的用户将如何保持登录到您的系统。会话,cookies等。会话很简单,但如果您的网站拥有数百万用户,则会变得非常昂贵。您可以使用memcache或Java中的众多分布式缓存中的一个来存储它们。但是,其他替代方案正在使用HMAC。请记住,与单向哈希不同,HMAC具有必须在服务器上受保护的私钥。如果您选择使用HMAC + cookie来识别用户,请采取措施以某种形式的对称加密来保护私钥。在HMAC不能使用过去的情况下也有一个死亡日期。 HMAC只应该在固定的时间段内有效。您的软件必须执行该操作。不要依靠cookie超时为你做这件事。

要考虑的其他事情是使用OpenID,因为它确实可以帮助用户访问您的网站,而无需通过注册过程。我有一个Android应用程序,我没有先要求提供帐户,但如果他们选择使用某些功能,我会要求他们注册。而且,通过不强制他们登录,用户的留存率更高。人员在注册过程中下降。

确保您的应用程序中的方法在执行之前强制某人进行身份验证。在调用方法之前,您需要有一种方法来强制所有方法调用通过应用程序的一部分,并且如果它们未通过身份验证,则将它们重定向到登录。尝试并记住他们所去的页面。

还有其他的,但我不完全确定这是你在找什么。祝你好运,并且在安全方面与谷歌做一点研究是值得的。

+0

谢谢;我正在建立一个检查清单,以便我可以验证我的新系统并检查一些旧系统。 – MathGladiator 2010-11-05 03:11:40

1

常见的边缘情况:

  • 人们忘记了密码。
  • 人们关闭Javascript,Flash,cookies ...任何技术,你可以想到依靠。
  • 安全性很难,你所要做的就是搞砸一次,毁掉你的月。 我的推荐:让别人去做。如果你可以避免重新发明那个轮子,那就这样做。