DeprecationWarning: Buffer () застарілий через проблеми безпеки та зручності використання, коли я переміщу сценарій на інший сервер


130

Отримання помилки під час переміщення сценарію на інший сервер.

(вузол: 15707) [DEP0005] Позбавлення попередження: Буфер () застарів через проблеми безпеки та зручності використання. Будь ласка, використовуйте замість цього методи Buffer.alloc (), Buffer.allocUnsafe () або Buffer.from ().

Поточні версії:

Ubuntu 16.04.4 LTS  
Node - v10.9.0  
NPM - 6.2.0  

Попередня версія:

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
Ви перевірили цю тему? github.com/yarnpkg/yarn/isissue/5770
Hemadri Dasari

4
Це не помилка, це попередження про те, що цей метод створення буфера застарілий: nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob--

Відповіді:


315
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

Зауважте, що Buffer.alloc () також швидший у поточних версіях Node.js, ніж новий Buffer (розмір) .fill (0), що інакше потрібно для забезпечення заповнення нуля.


3
що робити, якщо в коді немає жодного нового буфера ()? У мене це просто в пакет-lock.json?
Халед Джамала

@KhaledJamal, що саме ти маєш у пакеті-lock.json?
Небойша Сапич

2
@NebojsaSapic після відстеження проблеми я з'ясував, що server.js використовує його після того, як я додав у свій проект кутовий універсальний, я вважаю, що я не використовую останню його версію.
Халед Джамала

@KhaledJamal дякуємо за те, що підняли вашу проблему та заархівували її за публікацію, якщо хтось поділиться тією самою проблемою
Nebojsa Sapic

Я також бачу ту саму проблему, що і @KhaledJamal, коли я перетворив свій кутовий проект у візуалізацію на стороні сервера, додавши універсальний кут.
користувач2869612

16

Використання застарілого new Buffer()конструктора (iE як використовується Пряжа) може спричинити попередження про депресію. Тому НЕ слід використовувати застарілий / небезпечний конструктор буфера.

Згідно з попередженням про депресію new Buffer()слід замінити одним із:

  • Buffer.alloc()
  • Buffer.allocUnsafe() або
  • Buffer.from()

Іншим варіантом, щоб уникнути цієї проблеми, було б використання пакета безпечного буфера.

Ви також можете спробувати (при використанні пряжі ..):

yarn global add yarn

як згадувалося тут: Посилання

Ще одна пропозиція з коментарів (thx to gkiely): самооновлення

Примітка: самостійне оновлення недоступне. Перегляньте правила щодо застосування версій в рамках проекту

Щоб оновити свою версію Пряжі, запустіть

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

1
що робити, якщо в коді немає жодного нового буфера ()? Я просто маю його в package-lock.json
Халед Джамал

Простий спосіб оновлення пряжі: legacy.yarnpkg.com/en/docs/cli/self-update
gkiely

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

Змініть цей рядок із коду на цей -

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

або в моєму випадку я дав кодування у зворотному порядку

var userPasswordString = Buffer.from(baseAuth, 'utf-8').toString('base64');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.