Avertissement: Buffer () est obsolète en raison de problèmes de sécurité et d'utilisabilité lorsque je déplace mon script vers un autre serveur

129

Obtention d'une erreur lors du déplacement du script vers un autre serveur.

(nœud: 15707) [DEP0005] DeprecationWarning: Buffer () est obsolète en raison de problèmes de sécurité et d'utilisabilité. Veuillez utiliser les méthodes Buffer.alloc (), Buffer.allocUnsafe () ou Buffer.from () à la place.

Versions actuelles:

Ubuntu 16.04.4 LTS  
Node - v10.9.0  
NPM - 6.2.0  

La version précédente:

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

 }
Devendra Chauhan
la source
1
Avez-vous vérifié ce fil? github.com/yarnpkg/yarn/issues/5770
Hemadri Dasari
4
Ce n'est pas une erreur, c'est un avertissement que cette méthode de création d'un tampon est obsolète: nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob--

Réponses:

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

Notez que Buffer.alloc () est également plus rapide sur les versions actuelles de Node.js que le nouveau Buffer (size) .fill (0), ce dont vous auriez autrement besoin pour garantir un remplissage nul.

Nebojsa Sapic
la source
3
et si je n'ai pas de nouveau Buffer () dans mon code? Je l'ai juste dans package-lock.json?
Khaled Jamal
@KhaledJamal qu'est-ce que vous avez exactement dans package-lock.json?
Nebojsa Sapic
2
@NebojsaSapic après avoir tracé le problème, j'ai découvert que server.js l'utilisait après avoir ajouté angular universal à mon projet, je crois que c'est parce que je n'utilise pas la dernière version de It.
Khaled Jamal
@KhaledJamal merci d'avoir soulevé votre problème et de l'avoir archivé pour le message si quelqu'un partage le même problème
Nebojsa Sapic
Je rencontre également le même problème que @KhaledJamal lorsque j'ai converti mon projet angulaire en rendu côté serveur en ajoutant angular universal.
user2869612
16

L'utilisation du new Buffer()constructeur obsolète (iE tel qu'utilisé par Yarn) peut provoquer des avertissements d'obsolescence. Par conséquent, il ne faut PAS utiliser le constructeur de Buffer obsolète / unsafe.

Selon l'avertissement d'obsolescence, il new Buffer()doit être remplacé par l'un des éléments suivants:

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

Une autre option pour éviter ce problème serait d'utiliser le package safe-buffer à la place.

Vous pouvez également essayer (lorsque vous utilisez du fil ..):

yarn global add yarn

comme mentionné ici: Lien

Une autre suggestion des commentaires (merci à gkiely): mise à jour automatique

Remarque: la mise à jour automatique n'est pas disponible. Voir les politiques pour appliquer les versions dans un projet

Pour mettre à jour votre version de Yarn, exécutez

curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
iLuvLogix
la source
1
et si je n'ai pas de nouveau Buffer () dans mon code? Je l'ai juste dans package-lock.json
Khaled Jamal
Un moyen facile de mettre à jour le fil: legacy.yarnpkg.com/en/docs/cli/self-update
gkiely le
1
var userPasswordString = new Buffer(baseAuth, 'base64').toString('ascii');

Changez cette ligne de votre code à ceci -

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

ou dans mon cas, j'ai donné l'encodage dans l'ordre inverse

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