Avviso: Buffer () è obsoleto a causa di problemi di sicurezza e usabilità quando sposto il mio script su un altro server


129

Ottenere un errore quando lo script si sposta su un altro server.

(nodo: 15707) [DEP0005] DeprecationWarning: Buffer () è obsoleto a causa di problemi di sicurezza e usabilità. Utilizzare invece i metodi Buffer.alloc (), Buffer.allocUnsafe () o Buffer.from ().

Versioni attuali:

Ubuntu 16.04.4 LTS  
Node - v10.9.0  
NPM - 6.2.0  

Versione precedente:

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
Hai controllato questo thread? github.com/yarnpkg/yarn/issues/5770
Hemadri Dasari

4
Questo non è un errore, è un avviso che questo metodo di creazione di un buffer è deprecato: nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob--

Risposte:


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

Notare che Buffer.alloc () è anche più veloce sulle attuali versioni di Node.js rispetto al nuovo Buffer (size) .fill (0), che è ciò di cui avresti bisogno altrimenti per garantire il riempimento a zero.


3
cosa succede se non ho alcun nuovo Buffer () nel mio codice? Ce l'ho solo in package-lock.json?
Khaled Jamal

@KhaledJamal cosa hai esattamente in package-lock.json?
Nebojsa Sapic

2
@NebojsaSapic dopo aver rintracciato il problema ho capito che server.js lo stava usando dopo aver aggiunto angular universal al mio progetto, credo sia perché non sto usando l'ultima versione di It.
Khaled Jamal

@KhaledJamal grazie per aver sollevato il tuo problema e averlo archiviato per il post se qualcuno condivide lo stesso problema
Nebojsa Sapic

Sto anche riscontrando lo stesso problema di @KhaledJamal quando ho convertito il mio progetto angolare in rendering lato server aggiungendo angolare universale.
user2869612

16

L'utilizzo del new Buffer()costruttore deprecato (cioè come utilizzato da Yarn) può causare avvisi di deprecazione. Pertanto NON si dovrebbe usare il costruttore Buffer deprecato / non sicuro.

Secondo l'avviso di deprecazione new Buffer()dovrebbe essere sostituito con uno di:

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

Un'altra opzione per evitare questo problema sarebbe usare invece il pacchetto safe-buffer.

Puoi anche provare (quando usi il filo ..):

yarn global add yarn

come menzionato qui: Link

Un altro suggerimento dai commenti (grazie a gkiely): aggiornamento automatico

Nota: l'aggiornamento automatico non è disponibile. Vedi le politiche per l'applicazione delle versioni all'interno di un progetto

Per aggiornare la tua versione di Yarn, esegui

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

1
cosa succede se non ho alcun nuovo Buffer () nel mio codice? Ce l'ho solo in package-lock.json
Khaled Jamal

Un modo semplice per aggiornare il filato: legacy.yarnpkg.com/en/docs/cli/self-update
gkiely

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

Cambia questa riga dal tuo codice a questo -

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

o nel mio caso, ho dato la codifica in ordine inverso

var userPasswordString = Buffer.from(baseAuth, 'utf-8').toString('base64');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.