Введение

В Npm есть инструмент под названием npm Audit, который сообщает, есть ли в ваших пакетах или библиотеках какая-либо известная уязвимость или нет. Это отличная инициатива от npm.

Это серьезная угроза безопасности, при которой ваше приложение может быть взломано или уязвимо, если ваше приложение использует любую стороннюю библиотеку, в которой есть известная уязвимость. Даже если у вашего приложения нет проблем с безопасностью, но вся ваша система уязвима из-за этой сторонней библиотеки. Это одна из 10 главных угроз Owasp Security.

В этом посте мы увидим следующее:

  • Как использовать его через rest API
  • Вам не нужно устанавливать пакет перед использованием аудита npm.
  • нет необходимости запускать команду npm audit
  • проверить информацию об уязвимости для любого пакета npm, не устанавливая его

Как npm аудит работает внутри

Для этого требуется ваш файл package.json и package-lock.json. Он считывает некоторую метаинформацию из этих файлов и отправляет ее на свои веб-серверы через остальные API. Затем веб-сервер возвращает ответ и указывает, есть ли в какой-либо библиотеке уязвимая информация или нет.

Поэтому, когда вы запускаете аудит npm в домашнем каталоге вашего проекта. Он подготавливает некоторые данные и отправляет их на свой веб-сервер.

npm audit использует модуль npm-registry-fetch, который предоставляет некоторые методы для вызова остальных API. Хотя вы нигде не найдете его документацию. Я только что нашел его, просматривая код npm на GitHub.

Rest API для получения информации об аудите npm

URL: /-/npm/v1/security/audits
Host: registry.npmjs.org
Port: 443
HttpMethod: POST

Он имеет тело сообщения, которое выглядит так:

{
    "name": "npm_audit_test",
    "version": "1.0.0",
    "requires": {
        "marked": "^0.6.3"
    },
    "dependencies": {
        "marked": {
            "version": "0.6.3",
            "integrity": "sha1-ebq614r2OLpNUiqecVzf3SQp6UY=234"
        }
    }
}

Итак, хорошо, что вам не требуется файл package.json или package-lock.json. Вы можете просто вызвать этот API и получить результат. Вы можете видеть выше, что он отправляет некоторый хэш: integrity в теле POST, но вы также можете удалить его.

Давайте посмотрим на полностью функциональный код.

Код для получения данных аудита

Здесь я использовал несуществующее имя: npm_audit_test и любую версию моего проекта. Это может быть что угодно. И я использую пакет зависимостей: отмечен

const regFetch = require('npm-registry-fetch');
const auditData = {
    "name": "npm_audit_test",
    "version": "1.0.0",
    "requires": {
        "marked": "^0.6.3"
    },
    "dependencies": {
        "marked": {
            "version": "0.6.3",
            "integrity": "sha1-ebq614r2OLpNUiqecVzf3SQp6UY=234"
        }
    }
};
let opts = {
    "color":true,
    "json":true,
    "unicode":true,
    method: 'POST',
    gzip: true,
    body: auditData
};
return regFetch('/-/npm/v1/security/audits', opts)
    .then(res => {
        return res.json();
    })
    .then(res => {
        console.log(JSON.stringify(res, "", 3));
  }).catch(err => console.error(err));

Таким образом, решение, представленное выше, не требует установки ваших пакетов. Вы можете просто передать любое имя пакета, и все готово.

В приведенном выше примере я могу полностью удалить атрибут integrity, и он все равно будет работать.

Первоначально размещено по адресу: https://www.gyanblog.com/gyan/how-node-npm-audit-rest-api-vulnerability/

Дайте свои комментарии, если у вас есть какие-либо вопросы.