【问题标题】:DeprecationWarning: Buffer() is deprecated due to security and usability issues when I move my script to another server弃用警告:当我将脚本移动到另一台服务器时,由于安全性和可用性问题,不推荐使用 Buffer()
【发布时间】:2019-02-09 10:20:06
【问题描述】:

脚本移动到其他服务器时出错。

(node:15707) [DEP0005] DeprecationWarning:由于安全性和可用性问题,不推荐使用 Buffer()。请改用 Buffer.alloc()、Buffer.allocUnsafe() 或 Buffer.from() 方法。

当前版本:

Ubuntu 16.04.4 LTS  
Node - v10.9.0  
NPM - 6.2.0  

以前的版本:

Ubuntu 14.04.3 LTS
NPM - 3.10.10
Node - v6.10.3


exports.basicAuthentication = function (req, res, next) {
    console.log("basicAuthentication");
    if (!req.headers.authorization) {
        return res.status(401).send({
            message: "Unauthorised access"
        });
    }
    var auth = req.headers.authorization;
    var baseAuth = auth.replace("Basic", "");
    baseAuth = baseAuth.trim();
    var userPasswordString = new Buffer(baseAuth, 'base64').toString('ascii');
    var credentials = userPasswordString.split(':');

    var username = credentials[0] !== undefined ? credentials[0] : '';
    var password = credentials[1] !== undefined ? credentials[1] : '';
    var userQuery = {mobilenumber: username, otp: password};
    console.log(userQuery);
    User.findOne(userQuery).exec(function (err, userinfo) {
        if (err || !userinfo) {
             return res.status(401).send({
                message: "Unauthorised access"
             });
        } else {
            req.user = userinfo;
            next();
        }
    });

 }

【问题讨论】:

标签: node.js npm


【解决方案1】:
var userPasswordString = new Buffer(baseAuth, 'base64').toString('ascii');

将此行从您的代码更改为此 -

var userPasswordString = Buffer.from(baseAuth, 'base64').toString('ascii');

或者在我的情况下,我以相反的顺序给出了编码

var userPasswordString = Buffer.from(baseAuth, 'utf-8').toString('base64');

【讨论】:

    【解决方案2】:

    使用已弃用的 new Buffer() 构造函数(即 Yarn 使用的)可能会导致弃用警告。因此,不应使用已弃用/不安全的 Buffer 构造函数。

    根据弃用警告new Buffer() 应替换为以下之一:

    • Buffer.alloc()
    • Buffer.allocUnsafe()
    • Buffer.from()

    为了避免这个问题的另一个选择是使用安全缓冲包。

    您也可以尝试(使用纱线时..):

    yarn global add yarn
    

    这里提到:Link

    cmets 的另一个建议(感谢 gkiely):self-update

    注意:自我更新不可用。请参阅 policies 在项目中强制执行版本

    为了更新你的 Yarn 版本,运行

    curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
    

    【讨论】:

    【解决方案3】:
    new Buffer(number)            // Old
    Buffer.alloc(number)          // New
    

    new Buffer(string)            // Old
    Buffer.from(string)           // New
    

    new Buffer(string, encoding)  // Old
    Buffer.from(string, encoding) // New
    

    new Buffer(...arguments)      // Old
    Buffer.from(...arguments)     // New
    

    注意 Buffer.alloc() 在当前 Node.js 版本上也比 new Buffer(size).fill(0) 更快,这就是你的否则需要确保零​​填充。

    【讨论】:

    • 如果我的代码中没有任何新的 Buffer() 怎么办?我只是在 package-lock.json 中有它?
    • @KhaledJamal 你在 package-lock.json 中有什么?
    • @NebojsaSapic 在跟踪问题后我发现 server.js 在我将 Angular Universal 添加到我的项目后正在使用它,我相信这是因为我没有使用它的最新版本。
    • @KhaledJamal 感谢您提出您的问题,如果有人遇到同样的问题,请将其存档以供发布
    • 当我通过添加 Angular Universal 将我的 Angular 项目转换为服务器端渲染时,我也看到了与 @KhaledJamal 相同的问题。
    猜你喜欢
    • 2019-01-28
    • 2021-10-06
    • 2019-08-07
    • 2019-06-28
    • 2019-11-25
    • 2021-02-07
    • 1970-01-01
    • 2020-04-26
    • 2023-02-08
    相关资源
    最近更新 更多