package.json에 나열되지 않은 package-lock.json의 취약한 npm 패키지를 어떻게 수정합니까?


91

Github는 내 package-lock.json 파일의 종속성이 취약하고 구식이라고 말합니다. 문제는 내가 npm install또는을 수행 npm update하면 둘 다 package-lock.json 파일의 종속성을 업데이트하지 않는다는 것입니다.

나는 이것에 대해 많은 인터넷 검색을 수행했으며 파일을 삭제하고 npm install.

누구든지이 문제를 해결할 수 있다면 대단히 감사하겠습니다. 문제의 패키지는 실제로 내 package.json 파일에없는 Hoek입니다.

미리 감사드립니다.


2
package-lock.json을 삭제하고 npm install을 다시 실행하십시오
Rishikesh Dhokare

1
의존성을 확인하여 어느 것이 혹에 의존하는지 알아 내고 업데이트 할 수 있습니다. (그러나 운이 좋지 않을 수도 있으며 해당 종속성에는 최신 버전이 없습니다.)
Roland Starke

나는 @RishikeshDhokare의 동일을 제안합니다
xpto

@RishikeshDhokare가 말한대로했습니다. 문제는 나 자신을 위해 해결
melih을 사힌

답변:


41

Hoek이 종속성 중 하나의 종속성 인 것처럼 들립니다 (따라서 package.json에있는 패키지는 자체 package.json에서이를 필요로합니다).

이미 성공적으로 프로젝트 종속성을 삭제 / 재설치 및 업데이트하려고 시도 했으므로 해당 패키지 종속성에 명시 적 또는 최대 버전이 지정된 것 같습니다.

각 종속성에 대한 package.json을 보지 않으면 업데이트를 강제하는 방법에 대해 추가로 조언하기가 어려울 것입니다.

편집 : 어떤 패키지가 어떤 종속성을 사용하는지 식별하는 데 도움이되도록 NPM의 ls명령을 사용할 수 있습니다 . https://docs.npmjs.com/cli/ls

예를 들어 Hoek을 사용하는 패키지를 확인하려면 다음을 수행하십시오. npm ls hoek

편집 2 : Ulysse BN이 올바르게 지적했듯이 NPM 버전 6 이상이있는 경우을 사용 npm audit fix하여 NPM에 취약성을 수정하도록 요청할 수 있습니다.

편집 3 : 이것을 읽는 사람들은 아래 JBallin의 답변을 확인해야합니다. 여기에 제공된 정보를 확장하고 OP의 질문을 더 잘 해결하는 더 구조화 된 답변입니다. 그러나 빠른 수정을 원하면이 답변으로 충분합니다.


3
다른 패키지 (Growl)에서 비슷한 문제가 있습니다. 나는 그것이 package.jsonGrowl의 특정 (취약한) 버전에 의존하는 어떤 버전이라고 생각합니다 . 귀하의 대답은 올바른 방향에 있으며 package.json에서 보이는 취약한 패키지 에 의존 하는 패키지를 표시하는 명령을 공유 할 수 있다면 정답을 맞출 수 있습니다 package-lock.json.
Fuhrmanator

업데이트 된 답변을 참조하십시오. 추가 도움이 필요하면 새 질문을 만드십시오. :)
Alex Mulchinock


추가 질문이 정당하다고 확신하십니까? 중복 된 것 같습니다.
JBallin

@JBallin 내 대답은 그 이후로 여러 번 업데이트되었습니다. 원래 중복으로 인정되지 않았을 수 있습니다.
Alex Mulchinock은

24

TLDR : npm i $PARENT_PKG_NAME.


노트

종속성을 업데이트 할 때 CHANGELOG에서 주요 변경 사항을 검토해야합니다.

진단

npm audit취약한 패키지 (이를 위해서는 package-lock.json 파일이 필요하므로를 실행해야 함 npm i)와 종속 된 패키지 (해당되는 경우)를 모두 공개합니다. 를 사용 npm ls $CHILD_PKG_NAME하여 상위 종속성을 볼 수도 있습니다 .

빠른 수정 시도

npm audit fixnpm audit fix --force가치의 시도가 있지만, 때로는 수정 (아래 참조) 수동으로 수행해야합니다.

수동 수정

대부분의 경우 상위 패키지가 이미 종속성을 수정했을 것이므로 (GitHub로 이동하여 최근 커밋을 검토하여 확인할 수 있습니다. 또는 이것이 수정되었는지 확인하면됩니다) 실행하면 npm i $PARENT_PKG_NAME @$NEW_VERSION패키지 잠금이 업데이트됩니다. .json.

부모가 취약점을 수정하지 않은 경우

관리자가 응답하지 않는 것 같으면 동일한 작업을 수행하는 대체 패키지를 사용하거나 패키지를 포크하고 취약점을 직접 업데이트하는 것을 고려할 수 있습니다.

수정 확인

이제 실행 npm audit하고 취약점이 나타나지 않는지 확인하여 작동하는지 확인할 수 있습니다 . 변경 사항을 커밋하고 GitHub에 푸시하고 알림 / 경고를 새로 고치면 사라집니다!


내 경우에는 부모가 업데이트에서 API를 완전히 변경하고 해당 라이브러리를 제거하는 프레임 워크이기 때문에 빠른 수정 이이 답변의 매뉴얼이 작동하지 않는 것은 어떻습니까? 이것은 부모 fraemwork가 여전히 오래된 라이브러리를 사용하기 때문입니다. 실제로 오래된 것은 여전히 ​​관리되지만 업데이트되지 않았습니다. 어떻게 진행할 수 있습니까?
Carmine Tambascia

1
사용중인 패키지가 취약점을 수정하지 않는 경우 @CarmineTambascia (문제가 해결되기를 바라며 문제 / PR을 열겠습니다)-패키지의 포크를 직접 만들고 취약점을 수정하는 것을 고려할 것입니다. 영향을받는 패키지의 장소.
JBallin

자식 패키지를 업데이트하는 방법이 있습니까? 취약성에 대해 상위 패키지가 수정되지 않은 경우?
Harshita

@Harshita는 "부모가 취약점을 수정하지 않은 경우"섹션 참조
JBallin

1
@Harshita 당신은 그들에게 연락 했습니까? 이러한 취약점도 수정하는 것이 그들의 관심사입니다.
JBallin

6

npm @ 6 이상이있는 경우 npm audit fix보안 문제에 사용할 수 있습니다 .


수많은 다른 도구가 있으며 동일한 취약성 데이터베이스가 없습니다. 내가 찾은 가장 철저한 것은 Snytch입니다.
Ulysse BN

2

사용하다:

npm i hoek

npm은 최신 버전의 hoek을 설치하고 package.lock.json이 업데이트됩니다.


0

나는이 문제가 있었고 npm을 실행하고 있던 서버에 it-package-lock.json에서 이전 버전의 npm이 있었기 때문에 새로운 버전에서만 지원된다는 것을 알았습니다.


0

시도해 보셨습니까? 프로젝트 루트로 이동하여 package-lock.json파일 node_modules.cache폴더를 삭제 한 다음 npm install.


0

취약한 npm 패키지를 확인하려면 다음 명령을 사용하십시오.

npm audit

취약한 npm 패키지를 수정하려면 package-lock.json도 수정하는 다음 명령을 사용하십시오.

npm audit fix

0

package-lock.json수동으로 편집 하고 취약한 패키지 버전을 수정 된 버전으로 업데이트 한 다음 사용

npm ci

먼저 package-lock.json무시 하여 패키지를 설치합니다 package.json. 그런 다음

npm audit fix

다시 한 번 제대로 완료되었는지 확인합니다. 도움이되지 않으면 주어진 다른 솔루션을 사용하십시오.

여기에 추가 정보 :

https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable

또는 여기 : https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities


추가 솔루션은 다음과 같습니다. npmjs.com/package/npm-check-updates
Lonely

-3

새 종속성을 설치 한 후 다음 명령을 실행하여 package-lock.json 파일을 업데이트하십시오.

npm update package-lock.json
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.