
Instala paquetes NPM de forma segura
Un instalador de npm centrado en la seguridad que protege tus proyectos de paquetes recién comprometidos.
Los ataques a la cadena de suministro en paquetes npm son una amenaza creciente. Los atacantes a veces comprometen paquetes legítimos mediante:
Estos ataques suelen ocurrir de repente: un paquete que ayer era seguro podría estar comprometido hoy. safe-npm te protege al instalar solo versiones de paquetes que han estado disponibles públicamente durante un tiempo mínimo (90 días por defecto). Esto le da tiempo a la comunidad de seguridad para descubrir e informar versiones maliciosas antes de que lleguen a tu proyecto.
Cuando ejecutas safe-npm install, este:
package.json o de los argumentos de línea de comandosPor ejemplo, si especificas react@^18 y un [email protected] malicioso fue publicado ayer, safe-npm instalará la última versión que tenga al menos 90 días de antigüedad.
# Install globally
npm install -g @dendronhq/safe-npm
# Now you can use it anywhere
safe-npm install
# Clone and build
git clone <repository-url>
cd safe-npm
npm install
npm run build
# Link the binary globally
npm link
# Use the minimum age of 90 days (default)
safe-npm install
# Or specify your own minimum age
safe-npm install --min-age-days 120
# Install packages directly with version constraints
safe-npm install react@^18 lodash@^4.17.0
# These will be filtered to only use versions at least 90 days old
safe-npm install express --min-age-days 60
# Preview which versions would be installed without actually installing
safe-npm install --dry-run
--min-age-days <n>Default: 90
El número mínimo de días que una versión de paquete debe haber estado publicada antes de poder instalarse.
Ejemplo: --min-age-days 120 requiere que los paquetes tengan al menos 4 meses de antigüedad.
Cuándo ajustarlo:
--ignore <pkg1,pkg2>Una lista separada por comas de paquetes que omiten el requisito de antigüedad. Estos paquetes seguirán respetando los rangos semver pero ignorarán la antigüedad mínima.
Ejemplo: --ignore typescript,@types/node
Cuándo usarlo:
--strictSalir con error si ALGUNA dependencia no se puede resolver a una versión que cumpla el requisito de antigüedad.
Ejemplo: safe-npm install --strict
Cuándo usarlo:
--dev / --prod-onlyControla qué dependencias de package.json se procesan.
Ejemplos:
safe-npm install --dev - Instalar solo devDependenciessafe-npm install --prod-only - Instalar solo dependencias de producciónCuándo usarlo:
--strategy <direct|overrides>Default: direct
Cómo instala safe-npm las versiones resueltas:
direct - Instala directamente las versiones resueltas usando npm install package@version
overrides - Escribe las versiones resueltas en el campo overrides de package.json, luego ejecuta npm install
--registry <url>Default: https://registry.npmjs.org
Especifica un registro npm alternativo.
Ejemplo: --registry https://registry.company.com
Cuándo usarlo:
--dry-runMuestra lo que se instalaría sin realizar cambios.
Ejemplo: safe-npm install --dry-run
Cuándo usarlo:
# Create a new project
mkdir my-project && cd my-project
npm init -y
# Install dependencies safely
safe-npm install express@^4 lodash
# This creates package-lock.json with versions at least 90 days old
# Check what versions would be installed with age requirements
safe-npm install --dry-run
# If you're happy, install them
safe-npm install
# In your CI pipeline, fail the build if any package can't meet age requirements
safe-npm install --strict --min-age-days 120
# Or allow newer packages for dev dependencies only
safe-npm install --prod-only --strict
# Need to urgently update a specific package? Add it to ignore list
safe-npm install --ignore package-with-critical-fix
El proyecto incluye un conjunto de pruebas que puedes ejecutar:
npm test
Para pruebas automatizadas, puedes simular respuestas del registro usando fixtures:
export SAFE_NPM_FIXTURES=/path/to/fixtures.json
safe-npm install
El archivo fixtures debe contener JSON que refleje las respuestas del registro npm para cada paquete.
Escenario del mundo real:
popular-lib es mantenido por un desarrollador de confianza[email protected] con malware^5.0.0 instalarían inmediatamente la versión maliciosa4.9.0 (la última versión de hace más de 90 días)La seguridad se trata de compensaciones. safe-npm intercambia actualizaciones de última generación por protección contra compromisos repentinos de la cadena de suministro. Es una capa en una estrategia de defensa en profundidad que también debería incluir:
npm audit)ISC