
Safely install NPM packages
Um instalador npm focado em segurança que protege seus projetos contra pacotes recentemente comprometidos.
Ataques à cadeia de suprimentos em pacotes npm são uma ameaça crescente. Atacantes às vezes comprometem pacotes legítimos ao:
Esses ataques geralmente acontecem de repente—um pacote que era seguro ontem pode estar comprometido hoje. safe-npm protege você instalando apenas versões de pacotes que estão disponíveis publicamente há um tempo mínimo (90 dias por padrão). Isso dá tempo para a comunidade de segurança descobrir e reportar lançamentos maliciosos antes que eles atinjam seu projeto.
Quando você executa safe-npm install, ele:
package.json ou de argumentos da linha de comandoPor exemplo, se você especificar react@^18 e um [email protected] malicioso tiver sido publicado ontem, o safe-npm instalará a versão mais recente que tenha pelo menos 90 dias em vez disso.
# Instalar globalmente
npm install -g @dendronhq/safe-npm
# Agora você pode usá-lo em qualquer lugar
safe-npm install
# Clonar e compilar
git clone <repository-url>
cd safe-npm
npm install
npm run build
# Linkar o binário globalmente
npm link
# Usar a idade mínima de 90 dias (padrão)
safe-npm install
# Ou especificar sua própria idade mínima
safe-npm install --min-age-days 120
# Instalar pacotes diretamente com restrições de versão
safe-npm install react@^18 lodash@^4.17.0
# Eles serão filtrados para usar apenas versões com pelo menos 90 dias
safe-npm install express --min-age-days 60
# Visualizar quais versões seriam instaladas sem realmente instalar
safe-npm install --dry-run
--min-age-days <n>Padrão: 90
O número mínimo de dias que uma versão de pacote deve ter sido publicada antes de poder ser instalada.
Exemplo: --min-age-days 120 exige que os pacotes tenham pelo menos 4 meses.
Quando ajustar:
--ignore <pkg1,pkg2>Uma lista separada por vírgulas de pacotes que ignoram o requisito de idade. Esses pacotes ainda respeitarão os intervalos semver, mas ignorarão a idade mínima.
Exemplo: --ignore typescript,@types/node
Quando usar:
--strictSair com erro se QUALQUER dependência não puder ser resolvida para uma versão que atenda ao requisito de idade.
Exemplo: safe-npm install --strict
Quando usar:
--dev / --prod-onlyControla quais dependências do package.json são processadas.
Exemplos:
safe-npm install --dev - Instalar apenas devDependenciessafe-npm install --prod-only - Instalar apenas dependências de produçãoQuando usar:
--strategy <direct|overrides>Padrão: direct
Como o safe-npm instala as versões resolvidas:
direct - Instala diretamente as versões resolvidas usando npm install package@version
overrides - Escreve as versões resolvidas no campo de overrides do package.json, depois executa npm install
--registry <url>Padrão: https://registry.npmjs.org
Especificar um registro npm alternativo.
Exemplo: --registry https://registry.company.com
Quando usar:
--dry-runMostrar o que seria instalado sem fazer alterações.
Exemplo: safe-npm install --dry-run
Quando usar:
# Criar um novo projeto
mkdir my-project && cd my-project
npm init -y
# Instalar dependências com segurança
safe-npm install express@^4 lodash
# Isso cria o package-lock.json com versões de pelo menos 90 dias
# Verificar quais versões seriam instaladas com requisitos de idade
safe-npm install --dry-run
# Se estiver satisfeito, instale-as
safe-npm install
# Em seu pipeline CI, falhe o build se algum pacote não atender aos requisitos de idade
safe-npm install --strict --min-age-days 120
# Ou permitir pacotes mais novos apenas para dependências de desenvolvimento
safe-npm install --prod-only --strict
# Precisa atualizar um pacote específico com urgência? Adicione-o à lista de ignorados
safe-npm install --ignore package-with-critical-fix
O projeto inclui um conjunto de testes que você pode executar:
npm test
Para testes automatizados, você pode simular respostas do registro usando fixtures:
export SAFE_NPM_FIXTURES=/path/to/fixtures.json
safe-npm install
O arquivo de fixtures deve conter JSON que espelha as respostas do registro npm para cada pacote.
Cenário do mundo real:
popular-lib é mantido por um desenvolvedor confiável[email protected] com malware^5.0.0 instalariam imediatamente a versão maliciosa4.9.0 (a versão mais recente de 90+ dias atrás)Segurança é sobre trade-offs. O safe-npm troca atualizações de ponta por proteção contra comprometimentos súbitos da cadeia de suprimentos. É uma camada em uma estratégia de defesa em profundidade que também deve incluir:
npm audit)ISC