La seguridad de tu proyecto puede ser vulnerada por paquetes desactualizados. Al momento de instalar tus paquetes con el comando npm install muestra una serie de advertencias (NPM WARN) de las dependencias desactualizadas.
Auditar tus dependencias
El comando npm audit muestra una descripción de las dependencias instaladas. Si se encuentran vulnerabilidades, se calculará el impacto al proyecto.
Si se requiere un informe más detallado en formato JSON (JavaScript Object Notation), utiliza el comando npm audit --json.
El comando npm audit fix proporciona una actualización de los paquetes, similar al comando npm update <paquete>. El comando npm audit fix --force proporciona una actualización de los subpaquetes de cada paquete, en todos sus niveles de profundidad.
Cuando estés desarrollando un proyecto con NPM, puede que generes errores que no permitan seguir con tu trabajo. Saber manejar los errores es fundamental para solucionarlos y seguir con tus tareas (y no entrar en pánico). Alguno de estos errores pueden ser:
Errores en la configuración del archivo package.json
Errores de dependencias en node_modules
Errores del sistema operativo
Configuración errónea de Git o GitHub
Errores de escritura (typos)
Errores que no estén ligados directamente a NPM
Error de dependencias en node_modules
Existen situaciones en las que instalas una dependencia con una versión que no corresponde a la deseada. Esto ocurre porque NPM guarda en el caché una versión previamente instalada de un paquete, esto para mejorar los tiempos de instalación.
En esta situación, puedes utilizar los siguientes comandos, el primero para borrar el caché de NPM y el segundo para verificar si están eliminados correctamente.
$ npm cache clean --force
$ npm cache verify
Contribución creada por Andrés Guano (Platzi Contributor).
Me ha gustado mucho la clase, en especial porque he visto comandos que me topo en mi día a día desarrollando. Les dejo mis apuntes de los principales comandos de la clase:
npm audit --> Audita las dependencias que tenemos instaladas en busca de vulnerabilidades.
npm audit fix --> Audita e intenta arreglar las vulnerabilidades de nuestras dependencias.
npm audit --json --> Muestra los resultados de la auditoría a manera más profunda en formato json.
npm audit fix --force --> Corrige los problemas encontrados en las librerías instalando otras dependencias por debajo si es necesario.
igual creo que no todos los proyectos son igual de facil de actualizar, por ejemplo en algunas versiones de Angular necesitas correr otro comandos para que tambien actulice tu codigo o en ocasiones tu codigo tambien puede quedar deprecado con las actulizaciones que hagas
Comando Phoenix
🔥 Puede que existan valores corruptos o una instalación incorrecta de una dependencia, deberás eliminar el directorio de node_modules y después ejecutar el comando npm install para instalar correctamente los paquetes.
.
Puedes utilizar el siguiente comando phoenix en el package.json para evitar escribir demasiado cada vez que lo necesites. Lo aprendí de Midudev. 🙌
Es gracioso que comencé con 4 vulnerabilidades bajas, ejecute npm audit fix y npm audit fix --force y termine con 7 vulnerabilidades y 2 altas jajaja
😂😂😂.. esa no te la esperabas
Seguridad y solución de problemas
Muchas veces algunas dependencias pueden llegar a comprometer nuestro proyecto y podemos verlos al momento de hacer el npm install, si nos muestra vulnerabilidades
Moderates: pueden dejarse pasar, pues no tendrán mayor efecto.
High: podemos considerarlas, esto puede volverse crítico.
Critical: son las que si o si hay que reparar.
npm audit veremos las vulnerabilidades, lo que está sucediendo y nos entrega una serie de información para tomar decisiones. Si continuaremos utilizando la librería o si la actualizamos.
npm audit fix puede ser usado si nos indica que están disponibles reparaciones de dependencias. Entonces a parte de ejecutar la auditoria, puede hacer una reparación.
npm audit --json mostrará la información de forma mas detallada en un formato json para analizarla mejor.
npm audit fix --force es sugerido para implementar la reparación de las demás vulnerabilidades y por fin ser reparadas.
npm install nombre@latest se usa para actualizar los paquetes a su última versión para que no esté causando vulnerabilidades.
Hasta el momento me ha parecido un excelente curso. Muy buen profesor. Siempre usaba estos comandos pero no sabia su verdadero funcionamiento, he aprendido muchísimo. 100% recomendado.
🔐 Archivos del Proyecto 🔐
Pasos 📌
• En la terminal estar dentro de la carpeta del proyecto react-base, ejecutar:
npm audit
• Si se quiere ver el informe a un nivel mas detallado, tipo objeto, se ejecuta:
npm audit --json
• Si aún siguen apareciendo vulnerabilidades, se ejecuta:
npm audit fix
• Si aún siguen apareciendo vulnerabilidades, se ejecuta:
npm audit fix --force
• Si aún sigue apareciendo vulnerabilidades, se puede tratar de actualizar los paquetes a los que se refieren las advertencias, por ejemplo con web-pack, se busca cuáles paquetes se van actualizar, se listan los paquetes con:
Para auditar o revisar la vulnerebilidades de nuestras dependecias podemos utilizar
npm audit
Pero tambien podemos utilizar el siguiente comando para mostrar la auditoria de forma mas detallada a travez de un formano .JSON
npm audit --json
¿Como Resolver las vulnerabilidades?
Para resolver parte de las vulnerabilidades podemos utilizar el siguiente comando.
npm audit fix
Si despues de Ejecutar el anterior comando no fue suficiente se puede forzar la instalación de dependecias que ayudaran a eliminar estas vulnerabilidades o que correran por debajo de otras dependecias.
npm audit fix --force
‼️ Puede pasar que al correr estos comandos no se arreglen las vulnerabilidades, para este caso debes correr npm list y actualizar las dependencias manualmente
Una Alternativa: npm-check-updates
npm audit fix solo actualiza los paquetes que tienen vulnerabilidades. Pero si queremos actualizar los paquetes aunque no tengan vulnerabilidades?
Cuando usamos npm outdated, muestra todos los paquetes que tienen nuevas versiones, incluyendo versiones que podrían causar conflictos.
Si usamos npm update, se van a actualizar nuestros paquetes según las reglas de versionado semántico o SemVer rules que hemos especificado en el package.json. Pero si se encuentra una actualización que rompe algo, no lo va a instalar.
Para ser más cuidadosos con todo este proceso existe un paquete llamado npm-check-updates (Documentación) que verifica nuevas actualizaciones y hasta puede encontrar posibles breaks sin realmente modificar el proyecto.
Si lleva el flag -u va a modificar el package.json y luego necesita que se corra npm install para actualizar realmente las dependencias.
10/15 Curso de NPM: Seguridad y solución de problemas
La seguridad y la solución de problemas en proyectos de Node.js gestionados con NPM (Node Package Manager) son esenciales para mantener la estabilidad y la integridad de tu aplicación. Aquí tienes algunas prácticas clave para abordar estos aspectos en tu proyecto:
Seguridad:
Actualización de dependencias: Como se mencionó anteriormente, mantener tus dependencias actualizadas es fundamental para abordar vulnerabilidades de seguridad conocidas. Ejecuta npm outdated para verificar las actualizaciones disponibles y aplica las correcciones de seguridad mediante npm update.
Auditoría de seguridad: NPM proporciona una herramienta de auditoría de seguridad que puedes usar para identificar y solucionar vulnerabilidades conocidas en tus dependencias. Ejecuta el siguiente comando para realizar una auditoría de seguridad:
npm audit
Luego, sigue las recomendaciones para resolver las vulnerabilidades.
Paquetes verificados y confiables: Prefiere utilizar paquetes populares y ampliamente confiables con una base de usuarios activa y una comunidad que supervise la seguridad.
Control de acceso: Limita el acceso a tu proyecto en NPM y establece permisos adecuados para colaboradores. Solo las personas de confianza deben tener acceso de escritura a tu proyecto.
Verificación de firmas: Algunos paquetes de NPM son firmados digitalmente. Puedes verificar la firma de un paquete antes de instalarlo para garantizar su autenticidad.
Solución de problemas:
Registro y seguimiento de errores: Utiliza herramientas de registro y seguimiento de errores, como Winston, Bunyan o herramientas de registro en la nube, para rastrear y registrar errores en tu aplicación.
Depuración: Aprovecha las capacidades de depuración de Node.js y las extensiones de depuración en tu entorno de desarrollo, como Visual Studio Code, para identificar y solucionar problemas en tu código.
Pruebas automatizadas: Implementa pruebas automatizadas utilizando herramientas como Mocha, Jest o Jasmine para identificar y corregir problemas en tu código antes de que lleguen a producción.
Herramientas de rendimiento: Utiliza herramientas de rendimiento como New Relic o PM2 para analizar el rendimiento de tu aplicación en producción y resolver cuellos de botella.
Monitorización en producción: Establece sistemas de monitorización en producción para supervisar el estado y el rendimiento de tu aplicación en tiempo real. Herramientas como Prometheus y Grafana son útiles para esta tarea.
Gestión de dependencias: Asegúrate de gestionar adecuadamente las dependencias de tu proyecto en el archivo package.json. Mantén un registro claro de las versiones de las dependencias para evitar problemas de incompatibilidad.
Documentación y guías de solución de problemas: Proporciona documentación clara para desarrolladores que incluya información sobre cómo configurar el entorno de desarrollo, solucionar problemas comunes y manejar casos excepcionales.
Redes de apoyo y comunidad: Únete a comunidades en línea, como el foro de NPM, Stack Overflow y grupos de desarrollo en redes sociales, donde puedes obtener ayuda y consejos de otros desarrolladores.
Backups y restauración: Implementa estrategias de respaldo y recuperación para proteger tus datos y sistemas en caso de fallos graves.
La seguridad y la solución de problemas son prácticas continuas en el desarrollo de software. Mantén tus sistemas y dependencias actualizados, sigue buenas prácticas de codificación y permanece atento a las noticias de seguridad y a las actualizaciones de las dependencias para mantener tu proyecto seguro y en funcionamiento.
!Imgur
Espero sea de utilidad. 👨💻
Comparto una herramienta que permite estar verificando este tema de las vulnerabilidades y paquetes desactualizados en los proyectos (hacer la integración con la herramienta y recibir los informes al correo): https://snyk.io
Básicamente lo que nos da a entender el profe Oscar, es que una vez que ejecutamos todas las herramientas NPM que nos permiten auditar y fixear aquellas vulnerabilidades que nos saltan por consola, empezar a buscar aquellas más especificas que nos podrían estar causando problemas..
Como lo hace en el ejemplo de la clase con WEBPACK
NPM AUDIT, vemos los resultados por consola y actualizamos paquete por paquete con NPM INSTALL PACKAGE-NAME@LATEST.
a mi aparecieron errores criticos al querer actualizar webpack-cli, pero actualizando babel, se soluciono
Me está explotando la cabeza jajajajaja tanta información🤣🤣
Ya estoy acostumbrado!!! 😅 Lo mejor es hacerlo.
Excelente clase, muy útil este curso
Cuando corrí el audit fix continuaba dando error, pero al correr audit fix --force solucionó todas las vulnerabilidades!!
Muy buena clase y excelente curso!!!! Todo es bienvenido para no parar de aprender!!!
Genial el curso!! Muy bueno que lo hayan actualizado
el comando para actualizar es el mismo para dependencias de desarrollo como para las de produccion?
Afirmativo
Claro
npm install
Comparto mis apuntes:
Creo que este ejemplo perfecto de solucionar conflictos se queda supremamente corto a lo que pasa en la vida real, mínimo deberías tener un conflicto que no se pueda solucionar y mostrar que a veces debes mantener ciertas versiones lockeadas, porque si haces esa actualización puedes romper todo el código y por ello debes ser extremadamente cauteloso al correr fix o fix --force, este tipo de clases deben llevar esas banderas obligatoriamente!