用户系统的边缘情况

所以,我正在为我的node.js web框架写一个用户/authentication系统。

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

必须使用单向散列algorithm在数据库中散列密码。 这使您不必知道他们的密码。 select正确的algorithm很重要。 由于多个漏洞,MD5被认为是不安全的。 SHA1还没有被certificate是不安全的,因为MD5已经被certificate是不安全的,但是它在理论上被认为是弱的。 最好转换到SHA2或SHA256。 政府要求在2010年底前提交SHA2。

http://en.wikipedia.org/wiki/MD5

密码应该是盐渍的。 这可以防止您的密码字典攻击。 通过组合一条随机的信息意味着攻击者不能拿出一堆字来逐个尝试,看看你的系统中有什么哈希符合。

http://en.wikipedia.org/wiki/Salt_(cryptography

重点加强有助于抵御弱密码,因为弱密码会影响系统的安全性。 您可以使用散列algorithm迭代数千次以提高强制密码的复杂性。

http://en.wikipedia.org/wiki/Key_strengthening

确保您的用户通过https为Web应用程序提交login。 否则,他们会在明确提交密码。 不要试图让Javascript变得聪明。 只需使用https并完成它。

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

您需要考虑的另一件事是您的用户将如何保持login到您的系统。 会话,cookies等会话很容易,但如果您的网站拥有数百万用户,则会变得非常昂贵。 您可以使用memcache或Java中的众多分布式caching中的一个来存储它们。 但是,其他select正在使用HMAC。 请记住,与单向哈希不同,HMAC具有必须在服务器上受保护的私钥。 如果您select使用HMAC + cookie来识别用户,请采取措施以某种forms的对称encryption来保护私钥。 在HMAC不能使用过去的情况下也有一个死亡date。 HMAC只应该有一个固定的时间长度。 你的软件必须强制执行。 不要依靠cookie超时为你做这个。

其他要考虑的事情是使用OpenID,因为它确实可以帮助您的用户访问您的网站,而无需通过注册过程。 我有一个Android应用程序,我没有要求预先的帐户,但如果他们select使用某些function,我要求他们注册。 而且,通过不强制他们login,用户的保留要高得多。在注册过程中,用户会下降。

确保您的应用程序中的方法在执行之前强制某人进行身份validation。 在调用方法之前,您需要有一种方法来强制所有方法调用通过应用程序的一部分,如果它们未经过身份validation,则将其redirect到login名。 尝试并记住他们的页面。

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

常见情况:

  • 人们忘记密码。
  • 人们closuresJavascript,Flash,cookies …任何技术,你可以想到依靠。
  • 安全是困难的,你所要做的就是搞砸一次,毁掉你的月。 我的build议是:让其他人去做。 如果你可以避免重新发明那个轮子,那就这样做。