Dependencias
npm audit dice 0 vulnerabilities. Eso no quiere decir que tu app sea segura.
Quiere decir algo mucho más pequeño, y muy concreto: que ninguno de los paquetes que instalaste tiene un aviso de seguridad publicado. Del código que escribiste tú —o que escribió tu asistente— no dice nada, porque no lo abre.
Qué hace exactamente
Coge las dependencias de tu proyecto, se las manda al registro de npm y pregunta si alguna de esas versiones aparece en un aviso publicado. Si la respuesta es sí, te lo cuenta y te dice a qué versión subir. Eso es todo, y lo hace bien.
npm audit mira lo que instalaste. No mira lo que escribiste.
Lo que revisa
- ✓Los paquetes de terceros que tienes instalados, incluidos los que instalaron ellos.
- ✓Si la versión instalada aparece en un aviso de seguridad publicado.
- ✓El árbol entero, sin que tengas que decirle nada ni subir nada a ningún sitio.
Lo que ignora
- —Cada línea que escribiste tú, o que escribió tu asistente. Sin excepción.
- —Los archivos de configuración, los despliegues y las variables de entorno.
- —Cómo hablan entre sí las piezas de tu app.
Seis cosas que nunca va a ver
Todas son categorías reales de nuestro escáner, con el nombre con el que salen en el informe. Ninguna aparece en un árbol de dependencias, así que ninguna puede salir en un npm audit, por muy limpio que lo tengas.
Tu clave de OpenAI o de Anthropic, escrita en el código
Está en TU archivo, no en un paquete. npm audit no abre tus archivos.
Una consulta SQL construida pegando texto
El paquete de base de datos está perfectamente al día. Lo inseguro es cómo lo llamas.
La clave service_role de Supabase, servida al navegador
El paquete de Supabase no tiene ninguna vulnerabilidad. La vulnerabilidad es dónde pusiste la clave.
Tus tablas de Supabase sin protección por fila
Con la clave pública que cualquiera copia de tu JavaScript se leen enteras. Ningún paquete es culpable.
Una ruta de API que nunca comprueba quién llama
Es una función tuya de doce líneas. No aparece en ningún árbol de dependencias.
CORS abierto a todo internet
Una línea de configuración. npm audit no lee configuración.
Nuestro motor lleva 109 reglas de este tipo, y por debajo un seguimiento de flujo que persigue una variable hasta su origen — porque la clave casi nunca está escrita en la misma línea donde se usa.
Y hay tres cosas que ni siquiera son tu código
El pasado de tu repositorio
Borrar una clave del archivo no la borra del repositorio. El commit que la metió sigue ahí, y
git log -pla enseña entera a cualquiera que tenga acceso — o a todo internet si el repositorio es público.El sitio que ya está publicado
Tus usuarios no tocan tu código: tocan tu web. Las cabeceras, las cookies, el certificado, el DNS y si un desconocido puede mandar correos haciéndose pasar por tu dominio no viven en ningún archivo del proyecto.
Mañana
Un paquete que hoy sale limpio puede tener un CVE publicado la semana que viene sin que tú toques una línea. Un análisis es una foto; el riesgo se mueve.
En qué npm audit es mejor que nosotros
Cinco cosas, y no son de cortesía. Si te bastan, no necesitas nada más para las dependencias.
Es gratis, sin cuenta y sin conexión
Ya lo tienes instalado. No hay que registrarse en nada ni subir nada a ningún servidor.
Lee tu árbol instalado directamente
Sabe qué hay puesto de verdad en node_modules sin que le des nada. Nosotros necesitamos que tu lockfile entre en el análisis; si no, trabajamos sobre el rango que declara package.json, que es menos exacto.
npm audit fix lo arregla por ti
Actualiza y deja el proyecto funcionando. Nosotros te decimos a qué versión hay que subir; el comando lo escribes tú.
Entiende yarn.lock
Nosotros leemos package-lock.json y pnpm-lock.yaml. El de yarn, hoy, no.
Corre dentro de tu CI sin depender de nadie
Un paso más en el flujo de trabajo, sin llamar a ningún servicio externo.
Qué añadimos nosotros en las dependencias
Preguntamos a OSV.dev en vivo
La base pública de vulnerabilidades, en el momento del análisis. No una lista congelada el día que compilamos.
También Python
Leemos requirements.txt además de package.json. Un proyecto con las dos cosas se revisa entero.
Callamos lo que ya estaba arreglado
Antes de avisar comprobamos si el rango que ya declaraste permite instalar la versión corregida. Si un npm install normal lo resolvía, no te lo contamos como hallazgo: no queremos gastarte una tarde en algo que no era.
Tu código no viaja
La consulta a OSV.dev sale de tu navegador y solo lleva nombres de paquete y números de versión. Ni una línea de código.
Preguntas
- Entonces, ¿npm audit no sirve?
- Sirve, y hay que ejecutarlo. Es la mejor forma de saber si una librería que usas tiene un agujero conocido. Lo que no es, es una revisión de seguridad de tu aplicación — y el problema es que su resultado se lee como si lo fuera.
- ¿Por qué me salen avisos que no me afectan?
- Porque cuenta también las dependencias de desarrollo, que nunca llegan a tus usuarios: un aviso en una herramienta de compilación no es un agujero en tu app. Ese ruido es la razón por la que mucha gente deja de mirar la salida, que es lo peor que puede pasar.
- ¿Y npm audit fix --force?
- Sube versiones mayores y puede romperte el proyecto. Con --force estás aceptando cambios que rompen compatibilidad; conviene ejecutarlo con el árbol de trabajo limpio y probar antes de subir nada.
- Uso pnpm o yarn, ¿cambia algo?
- pnpm audit y yarn audit hacen lo mismo contra la misma clase de base de datos, con la misma frontera: dependencias sí, tu código no.
- ¿Necesito las dos cosas?
- Sí, y no compiten: no miran el mismo sitio. npm audit revisa lo que instalaste; un escáner de código revisa lo que escribiste. Un proyecto puede tener cero avisos de npm y una clave de API publicada en GitHub.
Corre las dos y compara
Ejecuta npm audit como siempre. Y después pasa tu código por el nuestro: el escaneo de 109 reglas es gratis e ilimitado, te enseña todos los hallazgos con su archivo y su línea, y tu código no se guarda.
Sin tarjeta. O empieza sin cuenta generando las reglas de seguridad para tu asistente.