我以前从未编写过用户身份验证系统,对于这个项目,我需要在安全性和效率之间取得平衡(这意味着我不能花费数百个工时来解决这个问题,但我需要保留密码和登录信息安全的)。
我将 Node.js 与 express 框架和护照一起用于身份验证和会话。
到目前为止,我所做的研究表明需要解决三个问题。在今天之前,我真的不知道是否存在针对这些问题的任何通用解决方案,并且几个小时的随机研究并没有让我对我找到的答案的完整性充满信心。
问题:
不要将未加密的纯文本密码存储在数据库中(可能的答案:在服务器上对密码进行加盐/散列,并将散列存储在数据库中。)
不要通过非安全的 http 连接传递纯文本密码(可能的答案:A--仅使用 Https 进行身份验证过程。之后使用 http。B--在登录页面向用户发送随机盐,散列密码客户端,然后取消散列并重新加密以进行数据库存储。)
不要使用 GPU 每秒可以破解 700,000,000 个密码的弱加密方法。(可能的答案:bcrypt)
这些只是我在 3 小时的研究中找到的最明智的答案。我不知道这些是否足够,它们的弱点是什么或可能有哪些替代方案。我会很感激任何进一步的见解(另请注意:我什至不确定 - https 是否在传输密码时充分保护密码?)