pnpm을 사용하는 프로젝트에서 승인되지 않은 패키지의 스크립트 실행을 차단하여 공급망 공격(Supply Chain Attack)을 방지하기 위한 운영 가이드입니다.
악성 패키지는 설치 단계의 postinstall, preinstall 스크립트를 통해 시스템의 환경 변수를 탈취하거나 악성 코드를 다운로드합니다. strict-dep-builds를 활성화하면 명시적으로 허용된 패키지 외에는 어떤 스크립트도 실행되지 않도록 강제합니다.
루트 디렉토리의 .npmrc 파일에 다음 설정을 추가합니다.
# 승인되지 않은 빌드 스크립트 발견 시 설치 프로세스 중단
strict-dep-builds=true
네이티브 모듈(예: sharp, esbuild, canvas)처럼 빌드 스크립트가 반드시 필요한 패키지들을 확인하고 승인합니다.
방법 A: 터미널 명령어로 추가
pnpm approve-builds <package-name>
방법 B: package.json에 직접 추가
package.json 파일의 pnpm.onlyBuiltDependencies 필드에 리스트를 관리합니다.
{
"pnpm": {
"onlyBuiltDependencies": [
"esbuild",
"sharp",
"@parcel/watcher"
]
}
}
설정을 마친 후 기존 캐시를 무시하고 정상적으로 설치되는지 확인합니다.
pnpm install
만약 허용되지 않은 패키지가 빌드를 시도하면 다음과 같은 에러가 발생하며 중단됩니다:
ERR_PNPM_IGNORED_BUILDS: The following packages wanted to run a build script but were not in "onlyBuiltDependencies"...
approve-builds를 실행합니다.onlyBuiltDependencies 목록을 정기적으로 검토하여 더 이상 사용하지 않는 패키지는 제거합니다.pnpm approve-builds를 통해 목록에 추가하면 해결됩니다.