Введение
В 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/
Дайте свои комментарии, если у вас есть какие-либо вопросы.