Как исправить уязвимости npm вручную?
Когда я запускаю npm install
он говорит, что found 33 vulnerabilities (2 low, 31 moderate) run 'npm audit fix' to fix them, or 'npm audit' for details
.
Тем не менее, npm audit fix
up to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated
Означает ли этот review
что он не должен быть исправлен пользователем?
Когда я запускаю npm audit
он дает мне список таблиц, подобный этому:
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.5 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ browser-sync [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ browser-sync > easy-extender > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/577 │
└───────────────┴──────────────────────────────────────────────────────────────┘
В этом примере в разделе исправлений на связанной странице указано " Update to version 4.17.5 or later.
, Однако в /node_modules/browser-sync/package.json
есть строки:
"devDependencies": {
"lodash-cli": "4.17.5",
}
и больше нет зависимости от lodash. Так что это должно быть уже v4.17.5. Я также проверил /node_modules/lodash/lodash.json
который имеет var VERSION = '4.17.10';
линия. В /node_modules/lodash/package.json
есть следующие строки:
"_from": "[email protected]^4.17.4",
"_id": "[email protected]",
Я считаю, что версия указана в "_id", а не в "_from", поэтому версии верны, но уязвимости все еще появляются в списке аудита.
Я все еще новичок в node.js, и эти сообщения меня сильно смущают. Есть ли способ исправить это вручную или избавиться от тех сообщений, с которыми я ничего не могу сделать?
Ответы
Ответ 1
lodash-cli
в devDependencies
не влияет на работу browser-sync
в вашем проекте, devDependencies
игнорируются, когда пакет устанавливается как зависимость.
В отчете о audit
говорится, что это easy-extender
с зависимостью от lodash
:
browser-sync > easy-extender > lodash
Это зависит от Lodash 3, в то время как проблема была исправлена в Lodash 4. Проблема может быть решена путем разветвления easy-extender
, его обновления и установки вместо пакета из открытого реестра NPM. Но нет реальной проблемы с этой зависимостью.
Важность audit
заключения должна оцениваться вручную. Даже если у вложенной зависимости есть риск для безопасности, это не означает, что была использована функция, представляющая этот риск. Это также не означает, что даже если оно используется, оно представляет реальный риск из-за того, как оно использовалось.
browser-sync
- это инструмент разработки, который не используется в рабочей среде, существует не так много сценариев, где его уязвимости можно было бы использовать. А Prototype Pollution вовсе не является уязвимостью, это просто уведомление о том, что пакет не следует передовым методам, его можно игнорировать.
Как правило, это способ исправить обнаруженные уязвимости:
- Сделать проверку вменяемости
- В случае, если это реальная проблема, проверьте хранилище уязвимого пакета на наличие проблем и PR
- Если их нет, отправьте вопрос
- Разветките репозиторий или используйте существующий PR в качестве git-зависимости, пока он не будет исправлен в выпуске NPM
- В случае вложенных зависимостей, делайте это на нескольких уровнях вложенности
В большинстве случаев ожидалось, что вы не продвинетесь дальше проверки здравомыслия.
patch-package
может помочь в исправлении вложенных зависимостей на месте, но это не повлияет на отчет audit
.
Ответ 2
npm install [email protected] -g
, просто используйте эту команду, надеюсь, она решит вашу проблему.
Ответ 3
0 информация работает, если она оканчивается на 1 verbose cli ['D:\New folder (2)\N\node.exe', 1 vers cli 'C:\Users\ELCOT\AppData\Roaming\npm\node_modules\npm\bin\npm-cli.js ', 1 verbose cli' start '] 2 информация с использованием [email protected] 3 информация с использованием [email protected] 4 verbose run-script [' prestart ',' start ',' poststart ' ] 5 жизненный цикл информации [email protected]~prestart: [email protected] 6 подробный жизненный цикл [email protected]~prestart: небезопасный -p ошибка в жизненном цикле true 7 подробный жизненный цикл [email protected] ~ предварительный запуск: PATH: C:\Users\ELCOT\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin; D:\Новая папка (2)\angular\to_do_list\todolist\node_modules.bin; C:\WINDOWS\system32; C:\WINDOWS; C:\WINDOWS\system32\Wbem; C:\WINDOWS\system32\WindowsPowerShell\v1.0 \; C:\WINDOWS\system32\OpenSSH \; D:\Новая папка (2)\N \; C:\Program Files\Git\cmd; C:\Program Files\dotnet \; C:\Program Files\Microsoft SQL Server\130\Tools\Binn \; C:\Users\ELCOT\AppData\Local\Microsoft\WindowsApps; C:\Users\ELCOT\AppData\Roaming\НПМ; D: \Новая папка (2)\Microsoft VS Code\bin 8 подробный жизненный цикл [email protected]~prestart: CWD: D:\Новая папка (2)\angular\to_do_list\todolist 9 глупый жизненный цикл [email protected] 0 ~ предварительный запуск: Args: ['/d/s/c', 'npm install'] 10 глупых жизненных циклов [email protected]~prestart: возвращено: код: 0 сигнал: нулевой 11 информация жизненного цикла [email protected] ~ начало: [email protected] 12 подробный жизненный цикл [email protected]~start: небезопасный -p истина в жизненном цикле true 13 подробный жизненный цикл [email protected]~start: PATH: C:\Users\ELCOT\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin; D:\Новая папка (2)\angular\to_do_list\todolist\node_modules.bin; C:\WINDOWS\system32; C:\WINDOWS; C:\WINDOWS\System32\Wbem; C:\WINDOWS\System32\WindowsPowerShell\v1.0 \; C:\WINDOWS\System32\OpenSSH \; D:\Новая папка (2)\N \; C:\Program Files\Git\cmd; C:\Program Files\dotnet \; C:\Program Files\Microsoft SQL Server\130\Tools\Binn \; C:\Users\ELCOT\AppData\Local\Microsoft\WindowsApps; C:\Users\ELCOT\AppData\Roaming\npm; D:\New f более старый (2)\Microsoft VS Code\bin 14 подробный жизненный цикл [email protected]~start: CWD: D:\New folder (2)\angular\to_do_list\todolist 15 глупый жизненный цикл [email protected]~ start: Args: ['/d/s/c', 'http-сервер -a localhost -p 8000 -c-1./app'] 16 глупых жизненных циклов [email protected]~start: возвращено: код: 1 сигнал: ноль 17 info жизненный цикл [email protected]~start: не удалось выполнить стартовый сценарий 18 verbose stack Ошибка: [email protected] start: http-server -a localhost -p 8000 -c-1./app
18 многословный стек Выход из состояния 1 18 многословный стек в EventEmitter. (C:\Users\ELCOT\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\index.js: 301:16) 18 многословных стеков на EventEmitter.emit(events.js: 189: 13) 18 многословных стек в ChildProcess. (C:\Users\ELCOT\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js: 55: 14) 18 подробных стеков в ChildProcess.emit(events.js: 189: 13) 18 многословных стеков в MaybeClose (внутренняя /child_process.js: 970: 16) 18 многословных стеков в Process.ChildProcess._handle.onexit (внутренняя /child_process.js: 259: 5) 19 многословных pkgid [email protected] 20 многословных cwd D:\New folder (2)\angular\to_do_list\todolist 21 подробный Windows_NT 10.0.17134 22 подробный argv "D:\New folder (2)\N\node.exe" "C:\Users\ELCOT\AppData\Роуминг\npm\node_modules\npm\bin\npm-cli.js "" start "23 подробный узел v10.15.3 24 подробный npm v6.9.0 25 код ошибки ELIFECYCLE 26 ошибка errno 1 27 ошибка [email protected] start: http-server -a localhost -p 8000 -c-1./app
27 error Состояние выхода 1 28 error Ошибка при запуске сценария http-server -a localhost -p 8000 -c-1./app
. 28 ошибка Это, вероятно, не проблема с npm. Вероятно, есть дополнительные выходные данные регистрации. 29 подробный выход [1, правда]
Ответ 4
Большая часть проблемы возникла в моей системе из-за пакета npm.
Я пытался,
npm un npm
Вам не нужно устанавливать снова.
Просто запустите программу снова. Это сработало для меня.