Aviso de descontinuação: Buffer () foi descontinuado devido a problemas de segurança e usabilidade quando movo meu script para outro servidor


129

Obtendo erro ao mover o script para outro servidor.

(nó: 15707) [DEP0005] DeprecationWarning: Buffer () está obsoleto devido a problemas de segurança e usabilidade. Use os métodos Buffer.alloc (), Buffer.allocUnsafe () ou Buffer.from ().

Versões atuais:

Ubuntu 16.04.4 LTS  
Node - v10.9.0  
NPM - 6.2.0  

Versão anterior:

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();
        }
    });

 }

1

4
Isso não é um erro, é um aviso de que este método de criação de um buffer está obsoleto: nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob--

Respostas:


313
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

Observe que Buffer.alloc () também é mais rápido nas versões atuais do Node.js do que o novo Buffer (size) .fill (0), que é o que você precisaria de outra forma para garantir o preenchimento zero.


3
e se eu não tiver nenhum Buffer () novo em meu código? Acabei de tê-lo no pacote-lock.json?
Khaled Jamal

@KhaledJamal o que exatamente você tem em package-lock.json?
Nebojsa Sapic

2
@NebojsaSapic depois de rastrear o problema, descobri que o server.js o estava usando depois de adicionar o angular universal ao meu projeto, acredito que seja porque não estou usando a versão mais recente dele.
Khaled Jamal

@KhaledJamal obrigado por levantar seu problema e arquivá-lo para a postagem se alguém compartilhar o mesmo problema
Nebojsa Sapic

Também estou vendo o mesmo problema de @KhaledJamal quando converti meu projeto angular em renderização do lado do servidor adicionando angular universal.
user2869612

16

O uso do new Buffer()construtor obsoleto (isto é, como usado pelo Yarn) pode causar avisos de suspensão de uso. Portanto, NÃO se deve usar o construtor Buffer obsoleto / inseguro.

De acordo com o aviso de suspensão de uso, o aviso new Buffer()deve ser substituído por um de:

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

Outra opção para evitar esse problema seria usar o pacote safe-buffer.

Você também pode tentar (ao usar fio ..):

yarn global add yarn

como mencionado aqui: Link

Outra sugestão dos comentários (thx para gkiely): auto-update

Nota: a atualização automática não está disponível. Veja as políticas para aplicar versões dentro de um projeto

Para atualizar sua versão do Yarn, execute

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

1
e se eu não tiver nenhum Buffer () novo em meu código? Acabei de tê-lo em package-lock.json
Khaled Jamal


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

Altere esta linha do seu código para este -

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

ou no meu caso, dei a codificação na ordem inversa

var userPasswordString = Buffer.from(baseAuth, 'utf-8').toString('base64');
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.