javascript - 用户系统的边缘情况

标签 javascript security node.js

所以,我正在为我的 node.js 网络框架编写一个用户/身份验证系统。

从可用性或安全性的 Angular 来看,我应该关注哪些边缘情况?

最佳答案

密码必须使用单向哈希算法在数据库中进行哈希处理。这使您不必知道他们的密码。选择正确的算法很重要。由于存在多个漏洞,MD5 被认为是不安全的。 SHA1 并没有像 MD5 那样被证明是不安全的,但它在理论上被认为是脆弱的。最好过渡到 SHA2 或 SHA256。到 2010 年底,政府要求使用 SHA2。

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

密码应该加盐。这可以防止对您的密码进行字典攻击。通过组合随机信息意味着攻击者无法获取一堆单词并一个一个地尝试查看哪些哈希与您的系统匹配。

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

key 强化有助于对抗弱密码,因为弱密码会损害系统的安全性。您可以使用哈希算法迭代数千次,以提高暴力破解密码的复杂性。

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

确保您的用户通过 https 提交他们的 Web 应用程序登录信息。否则他们将明文提交密码。不要尝试使用 Javascript 变得聪明。只需使用 https 即可。

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

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

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

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

还有其他的,但我不完全确定这就是您要找的。祝你好运,与谷歌一起做一些安全方面的研究是值得的。

关于javascript - 用户系统的边缘情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4103003/

相关文章:

javascript - AngularJS 的 While 循环?

security - Azure Active Directory v2.0 电子邮件地址验证

c# - 如何保护我的程序集不被其他人使用?

javascript - Node js需要执行功能

javascript - 使用 Node.js 执行命令行二进制文件

javascript - 如何让工具提示永远不会隐藏在 Chart.js 中?

javascript调试问题

security - 需要建议来设计 'crack-proof' 软件

node.js - Redis、Node.JS 和唯一 ID

javascript - 作业未重新启动