Optimizing Software Security Practices

Rate this content
Bookmark

¿Recuerdas aquella vez que una simple vulnerabilidad XSS expuso millones de registros de usuarios? ¿O cuando una variable de entorno mal configurada llevó a comprometer por completo la base de datos? Es la pesadilla de un desarrollador frontend, y ocurre más a menudo de lo que crees.

React te proporciona algunas herramientas de seguridad de serie, pero seamos sinceros: no son suficientes. Si estás construyendo algo más que una aplicación básica, necesitas mejorar tu juego de seguridad.

Esta sesión revelará 7 técnicas poderosas para fortalecer tus aplicaciones frontend contra los ataques más comunes.

This talk has been presented at React Summit US 2024, check out the latest edition of this React Conference.

David Mytton
David Mytton
29 min
22 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Esta charla cubre siete pasos para asegurar aplicaciones React, incluyendo la gestión de dependencias, validación, gestión de secretos, exposición de código, seguridad de contenido, implementación de seguridad y medidas de seguridad adicionales. Se enfatiza la importancia de comprender las dependencias y los riesgos, utilizando herramientas como NPM Audit y Socker.dev. También se destaca la necesidad de validación de dependencias y espacio de nombres de paquetes, así como la validación de entrada utilizando bibliotecas como Zod y Valobot. Los secretos deben ser gestionados utilizando herramientas como .env y un gestor de secretos, mientras que la exposición de código puede ser minimizada separando el código del lado del servidor y del lado del cliente. Se recomiendan políticas de seguridad de contenido y herramientas como Next Safe y Helmet para su implementación. Medidas adicionales incluyen análisis profundo de código, monitoreo de ejecución de código y políticas de seguridad de contenido estrictas.

1. Securing React Apps: Dependencies and Updates

Short description:

Esta charla trata sobre cómo asegurar tus aplicaciones de React, específicamente siete pasos para tener aplicaciones de React más seguras. Vamos a hablar sobre dependencias, validación de código y riesgos, consideraciones de implementación y la centralización del código.

Esta charla trata sobre cómo asegurar tus aplicaciones de React, específicamente siete pasos para tener aplicaciones de React más seguras. Ahora, vamos a hablar de algunas cosas diferentes y cubrir diferentes áreas y entrar en algunos detalles técnicos.

Primero, vamos a hablar sobre dependencias y algunas cosas que puedes hacer para pensar en la cadena de suministro de tus aplicaciones. Y luego vamos a adentrarnos en el código que estás escribiendo y pensar en la validación, cómo manejar secretos y variables de entorno, y luego considerar, bueno, ¿cuáles son los riesgos de exponerlos a través de la exposición del código? Y luego veremos algunos aspectos de la implementación, por lo que pensar en las cabeceras de seguridad y finalmente volveremos al código y pensar en la filosofía detrás de la centralización del código y en lo que tu editor de código puede hacer para ayudarte con todo esto.

Así que como una breve introducción, mi nombre es David Mitton. Soy el fundador de Artjet, que es un producto de seguridad como código. Es un SDK que los desarrolladores pueden instalar para ayudarles a construir cosas como protección de bots y prevención de ataques en sus aplicaciones. Y también escribo el boletín DevTools de console.dev, que se envía gratis todas las semanas. Así que vamos a meternos en el tema y hablar de las dependencias.

Ahora, cualquier aplicación que haga algo serio probablemente tendrá un gran número de dependencias. Y por lo tanto, el desafío aquí es mantenerse actualizado. El principio principal es entender de quién dependes, porque ejecutar npm install X o cualquier gestor de paquetes que estés usando está trayendo código de terceros que en teoría podrías leer, pero la mayoría de las veces no lo harás, ciertamente no a lo largo de la vida útil de un proyecto a medida que tus dependencias se actualizan regularmente. Y por lo tanto, esta es un área de riesgo grave, porque traer código de terceros que va a ejecutarse como parte de tu aplicación tiene el mismo acceso que si fuera el código que tú mismo has escrito. Y por lo tanto, lo que está en el archivo package JSON es realmente importante.

Ahora, hay un par de cosas diferentes que puedes hacer para gestionar esto. La que probablemente todos conocen es una herramienta de GitHub llamada Dependabot. Esto debería estar habilitado de forma predeterminada y debería ser una práctica estándar en cada repositorio que crees tener a Dependabot gestionando las actualizaciones de todas tus dependencias. Esta es la forma más fácil de introducir vulnerabilidades en tu código, pero también es la forma más fácil de mitigarlas, porque tener software actualizado es una de las formas más comunes en que ocurren los ataques. Y por lo tanto, mantener tus dependencias actualizadas es muy importante. Dependabot automatiza eso. Es bastante difícil estar al tanto de cada paquete que estás usando, en varios lenguajes de programación, tal vez, pero ciertamente dentro del ecosistema de JavaScript. Y Dependabot simplemente lo automatiza. Puedes configurarlo para que te dé actualizaciones todos los días o todas las semanas, y para agruparlas y hacer más fácil su gestión. Pero esencialmente abrirá solicitudes de extracción en tu repositorio con las últimas actualizaciones. Eso es genial, porque automáticamente ejecutará cualquier prueba que tengas. Creará una rama. Puedes implementarlo en un entorno de vista previa y puedes fusionar fácilmente las actualizaciones menores. Y esperemos que las actualizaciones mayores no causen cambios que rompan. Pero esta es una forma realmente fácil de mantenerse actualizado. Está disponible de forma gratuita en GitHub.

2. Securing React Apps: Gestión de Dependencias

Short description:

Si no quieres usar Dependabot de GitHub, entonces una alternativa está integrada en la CLI de NPM, NPM Audit. Hace algo muy similar. La herramienta que usamos en Artjet, junto con Dependabot, es Socker.dev. Y esta es una herramienta realmente útil. Cuando llega una nueva actualización a tu repositorio, escaneará la actualización en busca de actividad sospechosa. Es importante entender si algo ha cambiado en la dependencia entre versiones. Otro tipo de vulnerabilidad que esto puede detectar se llama vulnerabilidad de confusión de paquetes.

Si no quieres usar Dependabot de GitHub, entonces una alternativa está integrada en la CLI de NPM, NPM Audit. Hace algo muy similar. No es tan completo y profundo, y no es tan fácil simplemente hacer una nueva solicitud de extracción. Pero te da una vista de todas tus dependencias y si hay alguna vulnerabilidad de seguridad. La herramienta que usamos en Artjet, junto con Dependabot, es Socker.dev. Y esta es una herramienta realmente útil. De nuevo, está disponible de forma gratuita para paquetes de código abierto, aunque es un producto comercial. No tengo ninguna participación en ello. Solo soy un fan. Solo soy un usuario de ella. Pero cuando llega una nueva actualización a tu repositorio, escaneará la actualización en busca de actividad sospechosa. Ahora, esta es una captura de pantalla de una solicitud de extracción. Esta es una de hace uno o dos meses en nuestro repositorio en una de nuestras aplicaciones de Next.js. Y el primer comentario muestra que se agregaron algunas nuevas dependencias. Esto es útil para hacer un análisis de riesgo básico, porque puedes ver la dependencia que se agregó. Y también puedes ver las capacidades que tiene. Así que en este caso, la herramienta de registro PNO puede acceder al entorno y tiene acceso a evaluar y parte del sistema de archivos. Esto es solo una verificación rápida que puedes ver para asegurarte de que está haciendo lo que esperas que haga. Otra herramienta útil que viene con la detección de problemas de seguridad. Y esto es realmente importante para entender si algo ha cambiado en la dependencia entre versiones. Aquí se resalta que una de las dependencias es potencialmente un paquete trivial, mientras que otra es un nuevo autor que lo ha publicado, mientras que el autor anterior era alguien diferente. Ahora, en este caso, sabemos que el nuevo autor, Matteo Colino, es un miembro conocido de la comunidad de JavaScript, por lo que esto no representa un riesgo. Pero hay casos en los que un paquete puede cambiar repentinamente de propietario, y esto puede presentar un problema si no sabes quién es esa persona, y es posible que desees verificar para ver cuáles fueron sus confirmaciones iniciales. Ahora, otro tipo de vulnerabilidad que esto puede detectar se llama vulnerabilidad de confusión de paquetes. Ahora, esta es una captura de pantalla de un archivo package JSON de una de las dependencias que usamos en Artjet. Esto es algo que verás todo el tiempo. Y si pausas este video y echas un vistazo rápido, podrás tal vez detectar cuál es la vulnerabilidad de seguridad. Es bastante sutil aquí. Así que en este proyecto, tenemos un monorepositorio, y esto asume que hemos creado algunos paquetes locales porque queremos traer alguna configuración que queremos compartir en diferentes paquetes dentro del repositorio. Ahora, un enfoque común para esto es simplemente hacer referencia al nombre del paquete que tienes que encontrar localmente.