DeprecationWarning: Buffer () está en desuso debido a problemas de seguridad y usabilidad cuando muevo mi script a otro servidor

129

Recibiendo un error cuando el script se mueve a otro servidor.

(nodo: 15707) [DEP0005] DeprecationWarning: Buffer () está en desuso debido a problemas de seguridad y usabilidad. En su lugar, utilice los métodos Buffer.alloc (), Buffer.allocUnsafe () o Buffer.from ().

Versiones actuales:

Ubuntu 16.04.4 LTS  
Node - v10.9.0  
NPM - 6.2.0  

Versión previa:

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
fuente
1
¿Revisaste este hilo? github.com/yarnpkg/yarn/issues/5770
Hemadri Dasari
4
Esto no es un error, es una advertencia de que este método para crear un búfer está en desuso: nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob--

Respuestas:

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

Tenga en cuenta que Buffer.alloc () también es más rápido en las versiones actuales de Node.js que el nuevo Buffer (size) .fill (0), que es lo que de otro modo necesitaría para garantizar el llenado cero.

Nebojsa Sapic
fuente
3
¿Qué pasa si no tengo ningún Buffer () nuevo en mi código? ¿Lo acabo de tener en package-lock.json?
Khaled Jamal
@KhaledJamal, ¿qué tienes exactamente en package-lock.json?
Nebojsa Sapic
2
@NebojsaSapic después de rastrear el problema, descubrí que server.js lo estaba usando después de agregar angular universal a mi proyecto, creo que es porque no estoy usando la última versión de él.
Khaled Jamal
@KhaledJamal gracias por plantear su problema y archivarlo para la publicación si alguien comparte el mismo problema
Nebojsa Sapic
También veo el mismo problema que @KhaledJamal cuando convertí mi proyecto angular en una representación del lado del servidor agregando angular universal.
user2869612
16

El uso de lo obsoleto new Buffer() constructor (es decir, como lo usa Yarn) puede causar advertencias de obsolescencia. Por lo tanto, NO se debe usar el constructor Buffer obsoleto / inseguro.

Según la advertencia de obsolescencia, new Buffer()debe reemplazarse por uno de los siguientes:

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

Otra opción para evitar este problema sería utilizar el paquete safe-buffer en su lugar.

También puedes probar (cuando uses hilo ..):

yarn global add yarn

como se menciona aquí: Enlace

Otra sugerencia de los comentarios (gracias a gkiely): actualización automática

Nota: la actualización automática no está disponible. Ver políticas para hacer cumplir las versiones dentro de un proyecto

Para actualizar su versión de Yarn, ejecute

curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
iLuvLogix
fuente
1
¿Qué pasa si no tengo ningún Buffer () nuevo en mi código? Lo acabo de tener en package-lock.json
Khaled Jamal
Manera fácil de actualizar yarn: legacy.yarnpkg.com/en/docs/cli/self-update
gkiely
1
var userPasswordString = new Buffer(baseAuth, 'base64').toString('ascii');

Cambie esta línea de su código a esto:

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

o en mi caso, di la codificación en orden inverso

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