Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js和密码安全性:三个问题_Node.js_Express_Security_Bcrypt_Password Encryption - Fatal编程技术网

Node.js和密码安全性:三个问题

Node.js和密码安全性:三个问题,node.js,express,security,bcrypt,password-encryption,Node.js,Express,Security,Bcrypt,Password Encryption,我以前从未编写过用户身份验证系统,对于这个项目,我需要在安全性和效率之间取得平衡(这意味着我不能在安全方面花费数百个工时,但我需要确保密码和登录信息的安全) 我将Node.js与express框架和passport一起用于身份验证和会话 到目前为止,我所做的研究表明有三个问题需要解决。在今天之前,我真的不知道这些问题是否存在任何共同的解决方案,几个小时的随机研究并没有让我对我找到的答案的完整性有信心 问题是: 不要在数据库中存储未加密的纯文本密码 (可能的答案是:在服务器上对密码进行加密/散列,

我以前从未编写过用户身份验证系统,对于这个项目,我需要在安全性和效率之间取得平衡(这意味着我不能在安全方面花费数百个工时,但我需要确保密码和登录信息的安全)

我将Node.js与express框架和passport一起用于身份验证和会话

到目前为止,我所做的研究表明有三个问题需要解决。在今天之前,我真的不知道这些问题是否存在任何共同的解决方案,几个小时的随机研究并没有让我对我找到的答案的完整性有信心

问题是:

  • 不要在数据库中存储未加密的纯文本密码 (可能的答案是:在服务器上对密码进行加密/散列,并将散列存储在数据库中。)

  • 不要通过不安全的http连接传递纯文本密码 (可能的答案是:A——仅在身份验证过程中使用Https。之后,使用http.B——在登录页面向用户发送随机salt,对密码客户端进行散列,然后取消散列并重新加密数据库存储。)

  • 不要使用GPU每秒可以破解70000000个密码的弱加密方法。 (可能的答案:bcrypt)


  • 这些是我在3个小时的研究中发现的最合理的答案。我不知道这些是否足够,它们的弱点是什么,或者有什么替代方案。我希望能有进一步的了解(请注意:我甚至不确定——https在传输密码时是否能充分保护密码?

    安全方面的最佳实践有很多,但基本上都是一样的:抱最好的希望,期待最坏的结果。这就解释了你的三个问题:

  • 假设有人访问了您的数据库,您不希望密码被泄露。哈希密码保证您无法从哈希中获取密码
  • 这是为了避免中间人的攻击。服务器在向服务器传递请求和从服务器传递请求时,可以轻松地侦听和记录密码。即使你认为中间人进攻是不可能的,也要抱最好的希望,做最坏的打算
  • 使用一个很长的密码,很容易记住,但别人很难猜到。如果你能将尝试次数限制在每5分钟3次就更好了,因为那需要更多的时间来破解
    这三者中的每一个都围绕着这样一个观点:要么有人破解了你的系统并进行了损害控制,要么由于所需的时间太长而使其几乎不可能破解。性能很重要,但总是不如安全性重要。主要使用常识,不要基于假设而损害安全性,因为这是在安全性中插入错误的最可靠的方法。简言之,抱最好的希望,做最坏的打算

    这并没有明确地回答我的问题,(问题基本上是——这里有什么我没有想到的,或者有什么安全措施我不知道。)但是,非常肯定的是,事实上,你没有提到任何具体的东西,这告诉了我我需要知道的。我很感激你的回答。谢谢。@Brightstar,如果我不能帮你更多的忙,我向你道歉。Node.js仍处于开发阶段,虽然我确信安全性很重要,但大多数正在开发的东西也很重要。然而,它是javascript这一事实意味着,与其他语言不同,您对服务器的访问可能会受到限制,我认为这是服务器的一大优势和一个安全点。Neil,事实并非如此。Node.js不像浏览器端js那样是沙盒。节点的安全要求与任何其他语言的要求类似。不过,我还是非常感谢你的答复。你确实告诉了我我需要知道的。我的意思是,与转换成汇编并运行的典型语言不同,javascript是解释的,因此允许你确定node.js程序有什么权限和没有什么权限。这就像安装一台Java虚拟机来明确拒绝对其程序的磁盘写入访问一样。至少它有这种灵活性,我明白了。是的,我想那是真的。我想我从未真正想到这一点。