天道酬勤,学无止境

bcrypt Node.js 模块的安全差异(Security Differences with bcrypt Node.js Modules)

问题

我的一个项目是使用 bcrypt 模块来散列秘密。 少数人抱怨由于它的依赖关系而难以安装。 我之前尝试将它安装在 Windows Server 上,这不是在公园里散步。

人们要求我使用纯 Javascript 插件替代品,例如 dcodeIO/bcrypt.js 和 shaneGirish/bcrypt-nodejs。 但我真的不知道使用它们的安全隐患。 他们一样可靠吗?

回答1

如果这些实现是正确的,你应该使用最快的bcrypt ,这很可能意味着非 JS 实现。

您应该假设攻击者拥有最快的可用实现,并且您希望通过尽可能多地增加计算成本来减慢攻击者的速度。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Security Differences with bcrypt Node.js Modules
    One of my projects is using the bcrypt module for hashing secrets. A handful of people complain that it's hard to install because of it's dependencies. I've tried to install it on a Windows Server before, it's not a walk in the park. People are asking me to use pure Javascript drop-in replacements such as dcodeIO/bcrypt.js and shaneGirish/bcrypt-nodejs. But I really don't know the security implications of using them. Are they just as reliable?
  • bcrypt node.js(自动生成盐和哈希)(bcrypt node.js (auto-gen a salt and hash))
    问题 在将用户密码存储在我的数据库中之前,我使用以下代码来散列(并希望是加盐)用户密码。 // hash the password before the user is saved ConsultantSchema.pre('save', function(next) { var user = this; // hash the password only if the password has been changed or user is new if (!user.isModified('password')) return next(); // generate the hash bcrypt.hash(user.password, null, null, function(err, hash) { if (err) { logger.error("bcrypt.hash "+err); return next(err); } // change the password to the hashed version user.password = hash; next(); }); }); 我感到困惑的是,部分 bcrypt.hash(user.password, null, null, function(err, hash) { 我从教程中得到了这段代码
  • 编译bcrypt时出错-node.js(Error compiling bcrypt - node.js)
    问题 我正在尝试使用Windows 7 Ultimate x64通过npm install安装bycrpt。 这是我的安装日志: D:\Dropbox\Projekte\RZ\Finance-Man-GUI\node_modules\bcrypt>node "C:\Program File s\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node -gyp.js" rebuild npm http GET https://registry.npmjs.org/mime/1.2.6 npm http 304 https://registry.npmjs.org/coffee-script npm http 304 https://registry.npmjs.org/mkdirp npm http 304 https://registry.npmjs.org/cssom npm http 304 https://registry.npmjs.org/hooks/0.2.1 npm http 304 https://registry.npmjs.org/mongodb/1.2.8 npm http 304 https://registry.npmjs.org/ms/0.1.0 npm
  • Node.js 中的 $2y bcrypt 哈希($2y bcrypt hashes in Node.js)
    问题 我正在处理一个带有$2y哈希值的旧数据库。 我已经深入研究了这一点,还偶然发现了$2a和$2y之间差异的堆栈溢出。 我查看了 bcrypt 的节点模块,它似乎只生成和比较了$2a哈希值。 https://github.com/ncb000gt/node.bcrypt.js/issues/175 https://github.com/ncb000gt/node.bcrypt.js/issues/349 https://github.com/ncb000gt/node.bcrypt.js/issues/213 我找到了一个生成$2y哈希值的网站,所以我可以用bcrypt测试它们。 http://aspirine.org/htpasswd_en.html 这是字符串helloworld的$2y散列示例。 helloworld:$2y$10$tRM7x9gGKhcAmpeqKEdhj.qRWCr4qoV1FU9se0Crx2hkMVNL2ktEW 似乎该模块无法验证$2y哈希值。 这是我的测试。 var Promise = require('bluebird') var bcrypt = require('bcrypt') var string = 'helloworld' Promise.promisifyAll(bcrypt) // bcrypt.genSalt(10
  • Node.js 密码散列(Node.js hashing of passwords)
    问题 我目前使用以下哈希密码: var pass_shasum = crypto.createHash('sha256').update(req.body.password).digest('hex'); 您能否提出改进建议以使项目更安全? 回答1 我使用以下代码对密码进行加盐和散列。 var bcrypt = require('bcrypt'); exports.cryptPassword = function(password, callback) { bcrypt.genSalt(10, function(err, salt) { if (err) return callback(err); bcrypt.hash(password, salt, function(err, hash) { return callback(err, hash); }); }); }; exports.comparePassword = function(plainPass, hashword, callback) { bcrypt.compare(plainPass, hashword, function(err, isPasswordMatch) { return err == null ? callback(null, isPasswordMatch) : callback(err); }
  • 无法在Centos服务器上安装bcrypt node.js模块(Cannot install bcrypt node.js module on Centos Server)
    问题 我正在尝试在CentOS服务器上安装bcrypt,但出现以下错误: info postuninstall bcrypt@0.5.0 ERR! bcrypt@0.5.0 install: `make build` ERR! `sh "-c" "make build"` failed with 2 ERR! ERR! Failed at the bcrypt@0.5.0 install script. ERR! This is most likely a problem with the bcrypt package, ERR! not with npm itself. ERR! Tell the author that this fails on your system: ERR! make build ERR! You can get their info via: ERR! npm owner ls bcrypt ERR! There is likely additional logging output above. ERR! ERR! System Linux 2.6.18-028stab095.1 ERR! command "nodejs" "/usr/bin/npm" "install" "bcrypt" ERR! cwd /root/grouplo ERR
  • 如何修复gyp ERR! 在 npm 构建中(How to fix gyp ERR! inside a npm build)
    问题 我最近构建了一个均值堆栈应用程序并将其容器化。 但是,我在我的树莓派上构建它时遇到了麻烦,我不明白这个错误。 当我在我的 debian 机器上构建我的应用程序时,一切都完美地构建。 即使我在构建过程中得到这一行: node-pre-gyp WARN Using needle for node-pre-gyp https download 不幸的是,我无法在我的树莓派上构建相同的容器。 这个警告变得更糟,并以错误代码 1 退出: node-pre-gyp WARN Using needle for node-pre-gyp https download node-pre-gyp WARN Tried to download(404): https://github.com/kelektiv/node.bcryp t.js/releases/download/v4.0.1/bcrypt_lib-v4.0.1-napi-v3-linux-arm-musl.tar.gz node-pre-gyp WARN Pre-built binaries not found for bcrypt@4.0.1 and node@13.1.0 (node-v79 ABI, musl) (falling back to source compile with node-gyp) gyp ERR
  • 找不到模块“bcrypt”(Cannot find module 'bcrypt')
    问题 我收到错误在 nodejs 应用程序中找不到模块“bcrypt” 我尝试使用npm install bcrypt安装它,但仍然遇到问题。 node app.js 错误信息: Dec 30 2015 5:22:18 PM+05:30 - info: Connected to database: postgres://testdb:see2@$W@localhost/testdb Dec 30 2015 5:22:18 PM+05:30 - error: Error: Cannot find module 'bcrypt' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at Object.<anonymous> (D:\...\server\modules\user\model s\user.js:11:14) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at
  • How to fix gyp ERR! inside a npm build
    I recently built a mean stack app and containerized it. However, I have trouble build it on my raspberry pi and I don't understand the error. When I build my app over my debian machine, everything build perfectly. Even if I get this line during the build process: node-pre-gyp WARN Using needle for node-pre-gyp https download Unfortunately, I cannot build the same container on my raspberry. This warning get really worse and exit with error code 1: node-pre-gyp WARN Using needle for node-pre-gyp https download node-pre-gyp WARN Tried to download(404): https://github.com/kelektiv/node.bcryp t.js
  • Bcrypt Elastic beanstalk nodejs 部署(Bcrypt Elastic beanstalk nodejs deploy)
    问题 我正在尝试将我的 nodejs 后端与 codeship 部署到弹性 beantalk。 但每次我收到以下错误: bcrypt@1.0.3 install /tmp/deployment/application/node_modules/bcrypt node-pre-gyp install --fallback-to-build module.js:471 throw err; ^ Error: Cannot find module '../' at Function.Module._resolveFilename (module.js:469:15) at Function.Module._load (module.js:417:25) at Module.require (module.js:497:17) at require (internal/module.js:20:19) at Object.<anonymous> (/tmp/deployment/application/node_modules/.bin/node-pre-gyp:15:20) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load
  • 有没有像 bcrypt 这样的慢速 Javascript 哈希算法?(Are there any slow Javascript hashing algorithms like bcrypt?)
    问题 我不是在谈论服务器端 node.js。 我想对我网站客户端的密钥使用慢速散列算法。 我发现 SHA-256 的实现似乎是可靠的。 我还发现了这个问题,这导致 OP 创建了自己的库。 但是,我不确定我是否应该只进行多轮 SHA 散列或信任其中的一些代码,因为我不是安全专家,而且似乎没有大量追随者只被 36 人“盯着” . 在这种情况下,最好的选择是什么? 一旦我选择了某些东西,我(基本上)就无法改变方法。 我想要一个慢散列(不是加密)算法,我宁愿它产生一个短字符串。 例如,慢速 60 字符 bcrypt 与快速 70 字符 SHA-256。 回答1 目前有三种密钥派生函数被广泛认为是安全的,可以防止暴力破解尝试。 密钥派生函数与常规散列算法略有不同,因为它们被设计得很慢,即使面对现代基于 GPU 的计算也是如此。 我将按照理论安全性的顺序列出它们: PBKDF2由RSA设计,基于SHA,是NIST推荐的算法。 您可以在浏览器中使用几个实现。 Node 用户注意: Node 的crypto模块有一个内置的 PBKDF2 函数。 用那个。 bcrypt 基于 Blowfish,比 PBKDF2 稍微安全一些。 它已经过相对良好的测试和安全验证,但没有任何标准机构的批准印章,如果这是您的考虑因素。 这里有一个通用的 JS 实现。 Node 用户注意事项:使用 node.bcrypt
  • Bcrypt:Docker和Sails.JS的无效ELF标头(Bcrypt: invalid ELF header with Docker and Sails.JS)
    问题 我的节点Dockfile : # Set the base image to ubuntu FROM ubuntu # Define working directory ADD . /src WORKDIR /src # Install Node.js & other dependencies RUN apt-get update && \ apt-get -y install curl && \ apt-get -y install sudo && \ curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash - && \ apt-get -y install python build-essential nodejs RUN npm install -g node-gyp && \ node-gyp clean && \ npm cache clean RUN node -v # Install nodemon RUN npm install -g nodemon ADD package.json /src/package.json RUN cd /src && npm install # Expose port EXPOSE 8080 # Run app using nodemon CMD npm
  • bcrypt@1.0.3 安装:`node-pre-gyp install --fallback-to-build`(bcrypt@1.0.3 install: `node-pre-gyp install --fallback-to-build`)
    问题 在安装 bcrypt 时,我在 Windows 机器上收到此错误,我正在使用 节点 v8.9.4 npm v5.6.0 bcrypt v1.0.3 C:\Users\user\Desktop\mysql_node_api\register_login\register_login>npm install bcrypt --save > bcrypt@1.0.3 install C:\Users\user\Desktop\mysql_node_api\register_login\regis ter_login\node_modules\bcrypt > node- pre-gyp install --fallback-to-build node-pre-gyp ERR! 尝试下载(未定义):https://github.com/kelektiv/node .bcrypt.js/releases/download/v1.0.3/bcrypt_lib-v1.0.3-node-v57-win32-x64.tar.gz node-预石膏错误! 未找到 bcrypt@1.0.3 和 node@8.9.4(node-v57 ABI)的预构建二进制文件(使用 node-gyp 回退到源代码编译)gyp ERR! 配置错误gyp ERR! 堆栈错误:找不到 Python 可执行文件
  • bcrypt@1.0.3 install: `node-pre-gyp install --fallback-to-build`
    While installing bcrypt I'm getting this error in my windows machine, I'm using node v8.9.4 npm v5.6.0 bcrypt v1.0.3 C:\Users\user\Desktop\mysql_node_api\register_login\register_login>npm install bcrypt --save > bcrypt@1.0.3 install C:\Users\user\Desktop\mysql_node_api\register_login\regis ter_login\node_modules\bcrypt > node-pre-gyp install --fallback-to-build node-pre-gyp ERR! Tried to download(undefined): https://github.com/kelektiv/node .bcrypt.js/releases/download/v1.0.3/bcrypt_lib-v1.0.3-node-v57-win32-x64.tar.gz node-pre-gyp ERR! Pre-built binaries not found for bcrypt@1.0.3 and node@8
  • Error compiling bcrypt - node.js
    I'm trying to install bycrpt via npm install using Windows 7 Ultimate x64. This is my install log: D:\Dropbox\Projekte\RZ\Finance-Man-GUI\node_modules\bcrypt>node "C:\Program File s\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node -gyp.js" rebuild npm http GET https://registry.npmjs.org/mime/1.2.6 npm http 304 https://registry.npmjs.org/coffee-script npm http 304 https://registry.npmjs.org/mkdirp npm http 304 https://registry.npmjs.org/cssom npm http 304 https://registry.npmjs.org/hooks/0.2.1 npm http 304 https://registry.npmjs.org/mongodb/1.2.8 npm http 304 https
  • 节点-使用NODE_MODULE_VERSION 51针对不同的Node.js版本进行了编译(Node - was compiled against a different Node.js version using NODE_MODULE_VERSION 51)
    问题 我正在终端上运行节点应用程序。 最近已升级到节点v8.5.0,但出现此错误: Error: The module '/tidee/tidee-au/packages/tidee-au-server/node_modules/bcrypt/lib/binding/bcrypt_lib.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 51. This version of Node.js requires NODE_MODULE_VERSION 57. Please try re-compiling or re-installing the module (for instance, using `npm rebuild` or `npm install`). at Object.Module._extensions..node (module.js:653:18) at Module.load (module.js:545:32) at tryModuleLoad (module.js:508:12) at Function.Module._load (module.js:500:3) at Module.require (module.js:568:17) at
  • bcrypt_lib.node:未定义符号:node_module_register(bcrypt_lib.node: undefined symbol: node_module_register)
    问题 Error: /home/george/Desktop/myProject/node_modules/bcrypt/build/Release/bcrypt_lib.node: undefined symbol: node_module_register at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) at require (module.js:380:17) at bindings (/home/george/Desktop/myProject/node_modules/bcrypt/node_modules/bindings/bindings.js:76:44) at Object.<anonymous> (/home/george/Desktop/myProject/node_modules/bcrypt/bcrypt.js:3:35) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at
  • 如何使模块(例如 bcrypt)在 Express 中全局可用?(How to make module (such as bcrypt) available globally in Express?)
    问题 我有几个“路由”文件,我在其中导入这样的模块: var bcrypt = require('bcryptjs'); 我试图通过将 bcrypt 导入到我的主应用程序 js 中,然后使用类似这样的 app.use() 来使 bcrypt 在全球范围内可用: var bcrypt = require('bcryptjs'); app.use(bcrypt); // clearly not right, app crashes 我在这里尝试了各种各样的东西。 我应该坚持将它分别导入到每个文件中,还是有一个好方法可以让这个模块在全球范围内可用? 回答1 app.use仅适用于 Express 中间件,而bcrypt不是,它只是一个常规的 Node.js 模块。 正如评论中指出的那样,实际上没有任何理由不应该只使用require使bcrypt在任何需要它的模块中可用。 对于它的价值,您可以使用全局可用变量 global 在 Node.js 中创建一个全局变量。 在您的示例中,它将像这样使用(但同样,这不是推荐的): var bcrypt = require('bcryptjs'); global.bcrypt = bcrypt; 回答2 虽然您已经接受了一个答案,但我想我会更多地描述为什么您不想使用全局以及为什么在您需要的每个模块中只require() 。
  • 节点 gyp 错误跟踪器:错误 TRK0005:无法定位:“CL.exe”。 该系统找不到指定的文件(node gyp error TRACKER : error TRK0005: Failed to locate: “CL.exe”. The system cannot find the file specified)
    问题 我想在装有 Visual Studio Community 2015、Python v2.7.3 的 Windows 10 机器上安装 bcrypt,但出现以下错误。 节点版本 v4.2.1 node-gyp v3.0.3 npm install bcrypt C:\Users\ASMIN\Desktop\M2\app>npm install bcrypt npm WARN package.json eapp@1.0.0 No description npm WARN package.json eapp@1.0.0 No repository field. npm WARN package.json eapp@1.0.0 No README data > bcrypt@0.8.5 install C:\Users\ASMIN\Desktop\M2\app\node_modules\bcrypt > node-gyp rebuild C:\Users\ASMIN\Desktop\M2\app\node_modules\bcrypt>if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node
  • 使用npm安装bcrypt时出错(Error installing bcrypt with npm)
    问题 我无法在计算机上使用npm安装bcrypt,因为遇到以下错误。 我一直在排除此问题,但运气不佳。 您可以建议任何步骤来诊断或解决问题,以便我可以成功运行npm install bcrypt吗? Someones-Macbook:node_modules Cody$ npm install bcrypt npm WARN package.json grunt-contrib-htmlmin@0.1.3 No README data | > bcrypt@0.7.7 install /Applications/MAMP/htdocs/richintime/ultimate-seed/node_modules/bcrypt > node-gyp rebuild child_process: customFds option is deprecated, use stdio instead. CXX(target) Release/obj.target/bcrypt_lib/src/blowfish.o CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt.o CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt_node.o ../src/bcrypt_node.cc:118