我从未在此项目之前编写用户身份验证系统我需要在安全性和效率之间取得平衡(这意味着我无法花费数百个工时来处理安全性问题,但是我需要保持密码和登录信息安全。)
我使用带有快速框架和通行证的Node.js进行身份验证和会话。
到目前为止,我所做的研究显示了需要解决的三个问题。在今天之前,我真的不知道如果这些问题有任何共同的解决方案,并且几个小时的随机啄掉研究并不能让我对我找到的答案的完整性充满信心。 / p>
问题:
不要将未加密的纯文本密码存储在数据库中 (可能的答案:盐/哈希密码在服务器上并将哈希值存储在数据库中。)
不要通过非安全的http连接传递纯文本密码 (可能的答案:A - 仅使用Https进行身份验证过程。之后使用http.B - 在登录页面向用户发送随机盐,哈希密码客户端,然后取消哈希并重新加密数据库存储。)
不要使用GPU加密方法,GPU每秒可以破解700,000,000个密码。 (可能的答案:bcrypt)
这些只是我在3小时研究中发现的最明智的答案。我不知道这些是否足够,它们的弱点是什么,或者可能有哪些替代品。我很感激任何进一步的见解(另请注意:我甚至不确定 - https是否会在传输时充分保护密码?)
答案 0 :(得分:2)
安全性的最佳实践很多,但这个想法基本相同:希望最好,期望最坏。这解释了你的三个问题:
这三个中的每一个都认为某人已经破解了你的系统并进行了损害控制,或者由于它需要花费的时间使其几乎无法破解。性能很重要但总是 比安全更重要。仅仅使用常识并且不会基于假设来破坏安全性,因为这是在您的安全性中插入错误的最可靠方法。总之,希望是最好的,期待最坏的。