Skip to content

yocheco/iron-node

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

iron-node

🔒 Secure Node.js Setup (pnpm-first)

Configuración base para proyectos Node.js + TypeScript enfocada en seguridad de dependencias (supply-chain) y builds reproducibles.

⚠️ Este setup está pensado para entornos profesionales (APIs, SaaS, producción).


🧠 Principios

  • ❌ No confiar en dependencias nuevas automáticamente
  • ❌ No ejecutar código de terceros sin control
  • ✅ Builds reproducibles (mismo resultado siempre)
  • ✅ Minimizar superficie de ataque

📦 1) Package Manager

👉 No usar npm directamente 👉 Usar mínimo pnpm

{
  "packageManager": "pnpm@9.0.0"
}

✔ Asegura misma versión en todo el equipo ✔ Evita inconsistencias


🔒 2) Bloquear ejecución de scripts

Muchos ataques vienen de:

  • preinstall
  • postinstall
  • install

Ejemplo real: crypto miners, robo de tokens, backdoors.


npm

npm config set ignore-scripts true
npm config get ignore-scripts

pnpm

pnpm config set ignore-scripts true
pnpm config get ignore-scripts

⚠️ Nota importante

Algunos paquetes necesitan scripts:

  • bcrypt
  • sharp
  • esbuild
  • prisma

👉 En esos casos, usar whitelist (pnpm):

{
  "pnpm": {
    "onlyBuiltDependencies": [
      "bcrypt"
    ]
  }
}

⏱️ 3) Bloquear paquetes recién publicados

Evita instalar versiones nuevas potencialmente comprometidas.


pnpm

pnpm config set minimum-release-age 4320
pnpm config get minimum-release-age

👉 4320 = 3 días 👉 recomendado:

  • 1440 → flexible
  • 4320 → balance 🔥
  • 10080 → estricto

📌 4) Versiones exactas

Evita upgrades automáticos (^ o ~).


npm

npm config set save-prefix=''

pnpm

pnpm config set save-prefix=''

✔ Guarda versiones exactas:

"express": "5.2.1"

🧱 5) Lockfile obligatorio

  • npm → package-lock.json
  • pnpm → pnpm-lock.yaml

👉 SIEMPRE commitear


Instalación segura

pnpm install --frozen-lockfile

✔ Instala exactamente lo definido ✔ Falla si hay inconsistencias


🧾 6) Archivo .npmrc

Configuración base recomendada:

ignore-scripts=true
save-exact=true
minimum-release-age=1440
block-exotic-subdeps=true
trust-policy=no-downgrade

🔍 Explicación

  • ignore-scripts → bloquea scripts peligrosos
  • save-exact → versiones exactas
  • minimum-release-age → evita paquetes nuevos
  • block-exotic-subdeps → bloquea dependencias raras (git, tarballs, etc.)
  • trust-policy=no-downgrade → evita downgrade malicioso

🧨 7) Overrides (control total de dependencias)

Forzar versiones seguras:

{
  "pnpm": {
    "overrides": {
      "lodash": "4.17.21",
      "minimist": "1.2.8"
    }
  }
}

✔ Protege incluso sub-dependencias


🔍 8) Auditoría de seguridad

pnpm audit

Opcional:

pnpm audit --fix

🧪 9) Instalación en CI/CD

pnpm install --frozen-lockfile --ignore-scripts

✔ Máxima seguridad ✔ Sin ejecución de código externo


🧠 10) Buenas prácticas adicionales

🔹 Limitar dependencias

  • No instalar librerías innecesarias
  • Preferir código propio cuando sea simple

🔹 Revisar paquetes antes de instalar

  • GitHub stars
  • Último update
  • Issues
  • Maintainers

🔹 Evitar:

  • URLs directas (git+https)
  • paquetes sin mantenimiento
  • forks desconocidos

🔹 Usar Node version fija

.nvmrc

v20.11.0

🚀 TL;DR

✔ pnpm como estándar ✔ ignore-scripts activado ✔ minimum-release-age configurado ✔ versiones exactas ✔ lockfile obligatorio ✔ overrides para vulnerabilidades


🏁 Resultado

Con esta configuración tienes:

  • 🔒 Protección contra supply-chain attacks
  • 🔁 Builds reproducibles
  • 🧱 Control total de dependencias
  • ⚡ Base lista para producción

Este setup está pensado para proyectos donde la seguridad no es opcional.

About

Node.js + TypeScript con pnpm, control estricto de dependencias y protección contra ataques de cadena de suministro.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors