Przestarzałe Ostrzeżenie: funkcja Buffer () jest przestarzała ze względu na problemy z bezpieczeństwem i użytecznością, gdy przenoszę skrypt na inny serwer

130

Pojawia się błąd podczas przenoszenia skryptu na inny serwer.

(węzeł: 15707) [DEP0005] DeprecationWarning: Buffer () jest przestarzały ze względu na problemy z bezpieczeństwem i użytecznością. Zamiast tego użyj metod Buffer.alloc (), Buffer.allocUnsafe () lub Buffer.from ().

Aktualne wersje:

Ubuntu 16.04.4 LTS  
Node - v10.9.0  
NPM - 6.2.0  

Poprzednia wersja:

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
źródło
1
Sprawdziłeś ten wątek? github.com/yarnpkg/yarn/issues/5770
Hemadri Dasari
4
To nie jest błąd, to ostrzeżenie, że ta metoda tworzenia bufora jest przestarzała: nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob

Odpowiedzi:

314
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

Zauważ, że Buffer.alloc () jest również szybszy w obecnych wersjach Node.js niż nowy Buffer (size) .fill (0), co w innym przypadku potrzebowałbyś, aby zapewnić zerowe wypełnienie.

Nebojsa Sapic
źródło
3
co jeśli nie mam żadnego nowego bufora () w moim kodzie? Po prostu mam to w package-lock.json?
Khaled Jamal
@KhaledJamal, co dokładnie masz w package-lock.json?
Nebojsa Sapic
2
@NebojsaSapic po prześledzeniu problemu zorientowałem się, że server.js używa go po dodaniu do mojego projektu angular universal, uważam, że to dlatego, że nie używam jego najnowszej wersji.
Khaled Jamal
@KhaledJamal dziękuję za zgłoszenie problemu i zarchiwizuj go dla postu, jeśli ktoś ma ten sam problem
Nebojsa Sapic
Widzę również ten sam problem, co @KhaledJamal, kiedy przekonwertowałem mój projekt kątowy na renderowanie po stronie serwera, dodając angular universal.
user2869612
16

Użycie przestarzałego new Buffer()konstruktora (iE używanego przez Yarn) może powodować ostrzeżenia o wycofaniu. Dlatego NIE należy używać przestarzałego / niebezpiecznego konstruktora buforu.

Zgodnie z ostrzeżeniem o wycofaniu new Buffer()należy zastąpić je jednym z następujących:

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

Inną opcją pozwalającą uniknąć tego problemu byłoby użycie pakietu safe-buffer.

Możesz także spróbować (używając przędzy ..):

yarn global add yarn

jak wspomniano tutaj: Link

Kolejna sugestia z komentarzy (dzięki dla gkiely): samodzielna aktualizacja

Uwaga: samodzielna aktualizacja nie jest dostępna. Zobacz zasady wymuszania wersji w projekcie

Aby zaktualizować swoją wersję Yarn, uruchom

curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
iLuvLogix
źródło
1
co jeśli nie mam żadnego nowego bufora () w moim kodzie? Po prostu mam to w package-lock.json
Khaled Jamal
Łatwy sposób na aktualizację przędzy: legacy.yarnpkg.com/en/docs/cli/self-update
gkiely
1
var userPasswordString = new Buffer(baseAuth, 'base64').toString('ascii');

Zmień ten wiersz z kodu na ten -

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

lub w moim przypadku podałem kodowanie w odwrotnej kolejności

var userPasswordString = Buffer.from(baseAuth, 'utf-8').toString('base64');
Vibhor Dube
źródło