Política de Seguridad de Contenido con Next.js: Mejorando la Seguridad de tu Sitio Web

Rate this content
Bookmark
Project website
Lucas Estevão, un Ingeniero Principal de UI y Gerente Técnico en Avenue Code, discute cómo implementar la Política de Seguridad de Contenido (CSP) con Next.js para mejorar la seguridad del sitio web. Explica que CSP es una capa de seguridad que protege contra ataques de scripting entre sitios e inyecciones de datos al restringir la funcionalidad del navegador. La charla cubre la adición de CSP a una aplicación XJS utilizando metaetiquetas o encabezados, y demuestra el uso del atributo 'nonce' para permitir scripts en línea de forma segura. Estevão también destaca la importancia de utilizar informes de seguridad de contenido para identificar y mejorar la seguridad de la aplicación.

From Author:

En esta charla, exploraremos la poderosa característica de seguridad de la Política de Seguridad de Contenido (CSP) y cómo se puede implementar en Next.js para reforzar las defensas de tu sitio web contra ataques web comunes como Cross-Site Scripting (XSS) e inyección de datos. Cubriremos los conceptos básicos de CSP, sus beneficios y las mejores prácticas para implementarlo en Next.js.


Además, compartiremos algunas herramientas para evaluar y probar tu política. Al final de esta charla, tendrás una sólida comprensión de cómo mejorar la seguridad de tu sitio web con CSP y proteger a tus usuarios de las siempre presentes amenazas de la web moderna.

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

FAQ

Lucas Estevão es Ingeniero Principal de UI y Gerente Técnico en Avenue Code. Ha ayudado a empresas como Toys R Us, Wal-Mart y Apple a construir un software mejor y presenta un podcast sobre carreras en tecnología para hablantes de portugués.

Una Política de Seguridad de Contenido (CSP) es una capa de seguridad que ayuda a proteger las aplicaciones de ataques como XSS y ataques de inyección de datos, restringiendo la funcionalidad del navegador para ejecutar solo lo que la política define.

Se puede implementar una CSP en Next.js añadiendo directivas de política en la etiqueta meta dentro del head, o más efectivamente, mediante encabezados de respuesta HTTP en la configuración del servidor o usando middleware para condiciones más específicas.

Para validar y mejorar una CSP, se pueden utilizar herramientas en línea que analizan las políticas y ofrecen informes de seguridad, como los servicios de Google y Mozilla para revisar y sugerir mejoras en la política de seguridad de contenido.

El podcast 'Códigos de Carreira' es un programa presentado por Lucas Estevão que trata sobre carreras en tecnología, especialmente para hablantes de portugués. Está disponible en las principales plataformas de streaming.

Una política de seguridad es crucial en el desarrollo web porque ayuda a prevenir ataques maliciosos como XSS y la inyección de datos, asegurando que solo los scripts y recursos confiables se ejecuten en la aplicación.

Lucas Estevão
Lucas Estevão
9 min
15 Nov, 2023

Comments

Sign in or register to post your comment.

Video Transcription

1. Introducción a la Política de Seguridad de Contenido

Short description:

Soy Lucas Estevão, Ingeniero Principal de UI y Gerente Técnico en Avenue Code, una consultoría a través de la cual he estado ayudando a empresas como Toys R Us, Wal-Mart e incluso la icónica Apple a construir un software mejor. Estoy realmente emocionado de hablarles sobre la Política de Seguridad de Contenido con Next.js y cómo pueden mejorar la seguridad de su sitio web. Una CSP o una política de seguridad de contenido es una capa de seguridad que ayuda a proteger las aplicaciones de ataques como el scripting de tipo cruzado, XSS o ataques de inyección de datos, y lo hace restringiendo la funcionalidad del navegador.

Hola a todos. Gracias por tenerme en la Cumbre React US 2023. Soy Lucas Estevão, Ingeniero Principal de UI y Gerente Técnico en Avenue Code, una consultoría a través de la cual he estado ayudando a empresas como Toys R Us, Wal-Mart e incluso la icónica Apple a construir un software mejor. También presento un podcast sobre career en tecnología para hablantes de portugués, así que si tienes curiosidad, échale un vistazo en las principales plataformas de streaming. Solo necesitas buscar Códigos de Carreira.

Estoy realmente emocionado de hablarles sobre la Política de Security con Next.js y cómo pueden mejorar la seguridad de su sitio web. Quiero comenzar respondiendo ¿por qué debería importarme una política de security? Y para resumir, su navegador no es 100% seguro. Tampoco lo es React o Next.js o cualquier marco que puedas estar utilizando. Aunque los navegadores tienen incorporadas características de security como la política de origen único y course, no podemos darlo por hecho. Las bibliotecas y frameworks como React o Next.js, de nuevo, hacen un trabajo bastante decente sanitizando el código y proporcionando características para cerrar las brechas de security, pero eso no es suficiente. Si un código como este se inyecta en su sitio web, su navegador o las características predeterminadas de React no pueden prevenir que esto se ejecute. Ahí es cuando una CSP resulta útil.

Una CSP o una política de security es una capa de security que ayuda a proteger las aplicaciones de ataques como el scripting de tipo cruzado, XSS o ataques de data inyección, y lo hace restringiendo la funcionalidad del navegador. Una CSP está compuesta por una lista de directivas de política. El navegador estará limitado a permitir solo lo que la política define. Aquí hay ejemplos de directivas de política, donde estoy definiendo que las fuentes predeterminadas de contenido deben provenir de mi dominio y estoy agregando una excepción para las fuentes porque quiero permitir que se descarguen las fuentes web de Google. Ahora veamos cómo podemos implementar eso en una aplicación XJS. Vamos a la práctica ahora.

2. Añadiendo la Política de Seguridad de Contenido

Short description:

Esta es una aplicación XJS. Queremos añadir la CSP a la página. La forma más fácil es añadiéndola a la etiqueta head usando una etiqueta meta. Intentemos añadir encabezados en su lugar. Añadiremos una política de seguridad de contenido simple para verla funcionando en los encabezados. A continuación, intentaremos usar un middleware para añadir una política de seguridad de contenido. Crea un nuevo archivo llamado middleware.ts en la raíz de nuestra aplicación y consulta la documentación para más detalles.

Bien, esta es una aplicación XJS, solo una plantilla que creé usando NPX. Lo primero que queremos intentar hacer es añadir la CSP a la página. Y la forma más fácil de hacerlo es añadiéndola en la etiqueta head usando una etiqueta meta.

Así que vamos a la aplicación y vemos que la imagen no se está mostrando aquí. Y la imagen no se muestra porque proviene de un dominio diferente. Viene de React Summit. Y mi directiva está imponiendo que el contenido debería venir por defecto de mi propio dominio. La imagen no debería aparecer, pero vamos a eliminar esto de aquí. Esa no es la mejor manera de añadir una política de security.

Intentemos hacerlo añadiendo encabezados. Así que si vas a la documentation, ves cómo añadir encabezados a tu aplicación Next.js, y ves un montón de opciones para añadir diferentes encabezados, incluyendo la política de security. Así que preparé algo aquí. Elegí algunos de los encabezados de security. Voy a añadirlos a nuestra configuración de la aplicación Next.js. Y también voy a añadir los encabezados. Y de nuevo, todo esto está disponible en los documentos. Voy a guardar esto, y vamos al paso número dos.

Lo que queremos hacer aquí es simplemente añadir una política de security simple para verla funcionando en los encabezados. Así que voy a hacer esto y añadir la política de security a mi encabezado. Y quiero ver esto sucediendo en acción. Se está recargando. Voy a recargar esta página. Sólo para asegurarme, voy a ir a la pestaña de red. Vamos a comprobarlo. Abre esto, puedes ver que la política de security está ahí exactamente de la manera que la configuramos. La imagen todavía no aparece. Vamos al paso número tres y intentemos usarlo para añadir una política de security usando un middleware. Y para eso, vamos a crear un nuevo archivo en la raíz de nuestra aplicación. Así que nuevo archivo, en realidad no aquí, sino en la raíz, nuevo archivo middleware.ts, déjame mover esto aquí. Y si vuelves a la documentation de nuevo, puedes ver todo acerca de cómo trabajar con los middlewares.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
Entendiendo la Arquitectura Fiber de React
React Advanced Conference 2022React Advanced Conference 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
This Talk explores React's internal jargon, specifically fiber, which is an internal unit of work for rendering and committing. Fibers facilitate efficient updates to elements and play a crucial role in the reconciliation process. The work loop, complete work, and commit phase are essential steps in the rendering process. Understanding React's internals can help with optimizing code and pull request reviews. React 18 introduces the work loop sync and async functions for concurrent features and prioritization. Fiber brings benefits like async rendering and the ability to discard work-in-progress trees, improving user experience.
Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Node Congress 2022Node Congress 2022
26 min
Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Top Content
The talk discusses the importance of supply chain security in the open source ecosystem, highlighting the risks of relying on open source code without proper code review. It explores the trend of supply chain attacks and the need for a new approach to detect and block malicious dependencies. The talk also introduces Socket, a tool that assesses the security of packages and provides automation and analysis to protect against malware and supply chain attacks. It emphasizes the need to prioritize security in software development and offers insights into potential solutions such as realms and Deno's command line flags.
Una Guía Práctica para Migrar a Componentes de Servidor
React Advanced Conference 2023React Advanced Conference 2023
28 min
Una Guía Práctica para Migrar a Componentes de Servidor
Top Content
React query version five is live and we'll be discussing the migration process to server components using Next.js and React Query. The process involves planning, preparing, and setting up server components, migrating pages, adding layouts, and moving components to the server. We'll also explore the benefits of server components such as reducing JavaScript shipping, enabling powerful caching, and leveraging the features of the app router. Additionally, we'll cover topics like handling authentication, rendering in server components, and the impact on server load and costs.
Componentes del Servidor: La Épica Historia de Renderizar UX
React Summit 2023React Summit 2023
26 min
Componentes del Servidor: La Épica Historia de Renderizar UX
Top Content
This Talk introduces server components in React, which provide an intermediate format for rendering and offer advantages for both client-side and server-side rendering. Server components reduce bundle size on the client and improve search engine optimization. They abstract the rendering process, allowing for faster rendering and flexibility in choosing where to render components. While server components are still in the experimental stage, Next.js is a good starting point to try them out.

Workshops on related topic

Aventuras de Renderizado Concurrente en React 18
React Advanced Conference 2021React Advanced Conference 2021
132 min
Aventuras de Renderizado Concurrente en React 18
Top Content
Featured WorkshopFree
Maurice de Beijer
Maurice de Beijer
Con el lanzamiento de React 18 finalmente obtenemos el tan esperado renderizado concurrente. Pero, ¿cómo va a afectar eso a tu aplicación? ¿Cuáles son los beneficios del renderizado concurrente en React? ¿Qué necesitas hacer para cambiar al renderizado concurrente cuando actualices a React 18? ¿Y qué pasa si no quieres o no puedes usar el renderizado concurrente todavía?

¡Hay algunos cambios de comportamiento de los que debes estar al tanto! En esta masterclass cubriremos todos esos temas y más.

Acompáñame con tu portátil en esta masterclass interactiva. Verás lo fácil que es cambiar al renderizado concurrente en tu aplicación React. Aprenderás todo sobre el renderizado concurrente, SuspenseList, la API startTransition y más.
Comenzando con Suspense y Renderizado Concurrente en React
React Summit 2020React Summit 2020
125 min
Comenzando con Suspense y Renderizado Concurrente en React
Featured Workshop
Maurice de Beijer
Maurice de Beijer
React sigue evolucionando y haciendo que las cosas difíciles sean más fáciles para el desarrollador promedio.
Un caso en el que React no era particularmente difícil pero muy repetitivo, es trabajar con solicitudes AJAX. Siempre hay una trinidad de estados de carga, éxito y posibles errores que deben manejarse cada vez. Pero ya no, ya que el componente `<Suspense />` facilita mucho la vida.
Otro caso es el rendimiento de aplicaciones más grandes y complejas. Por lo general, React es lo suficientemente rápido, pero con una aplicación grande, la renderización de componentes puede entrar en conflicto con las interacciones del usuario. El renderizado concurrente se encargará de esto, en su mayoría de forma automática.
Aprenderás todo sobre cómo usar <Suspense />, mostrar indicadores de carga y manejar errores. Verás lo fácil que es comenzar con el renderizado concurrente. Harás que el suspense sea aún más capaz combinándolo con el renderizado concurrente, el gancho `useTransition()` y el componente <SuspenseList />.
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
React Summit 2022React Summit 2022
173 min
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
Top Content
WorkshopFree
Kellen Mace
Kellen Mace
En esta masterclass, aprenderás cómo construir una aplicación Next.js que utiliza Apollo Client para obtener datos de un backend de WordPress sin cabeza y usarlo para renderizar las páginas de tu aplicación. Aprenderás cuándo debes considerar una arquitectura de WordPress sin cabeza, cómo convertir un backend de WordPress en un servidor GraphQL, cómo componer consultas usando el IDE GraphiQL, cómo colocar fragmentos GraphQL con tus componentes, y más.
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión
Crea un sitio web editable visualmente con Next.js utilizando React Bricks, con blog y comercio electrónico
React Summit 2023React Summit 2023
139 min
Crea un sitio web editable visualmente con Next.js utilizando React Bricks, con blog y comercio electrónico
Top Content
WorkshopFree
Matteo Frana
Matteo Frana
- React Bricks: por qué lo construimos, qué es y cómo funciona- Crea una cuenta gratuita- Crea un nuevo proyecto con Next.js y Tailwind- Explora la estructura del directorio- Anatomía de un Brick- Crea un nuevo Brick (Texto-Imagen)- Añade un título y descripción con edición visual RichText- Añade una imagen con edición visual- Añade controles de barra lateral para editar props (relleno y lado de la imagen)- Anidación de Bricks utilizando el componente Repeater- Crea un brick de galería de imágenes- Publica en Netlify o Vercel- Tipos de página y campos personalizados- Acceso a los valores meta de la página- Internacionalización- Cómo reutilizar contenido en varias páginas: Historias y incrustaciones- Cómo crear un comercio electrónico con datos de productos de una base de datos externa y páginas de aterrizaje creadas visualmente en React Bricks- Características empresariales avanzadas: permisos flexibles, estructura bloqueada, componentes visuales personalizados
De Todo App a B2B SaaS con Next.js y Clerk
React Summit US 2023React Summit US 2023
153 min
De Todo App a B2B SaaS con Next.js y Clerk
WorkshopFree
Dev Agrawal
Dev Agrawal
Si eres como yo, probablemente tengas un millón de ideas para proyectos secundarios, algunas de las cuales incluso podrían hacerte ganar dinero como un micro SaaS, o podrían resultar ser la próxima startup de mil millones de dólares. Pero, ¿cómo sabes cuáles? ¿Cómo pasas de una idea a un producto funcional que puede ser puesto en manos de clientes que pagan sin renunciar a tu trabajo e invirtiendo todo tu tiempo y dinero en ello? ¿Cómo pueden competir tus proyectos secundarios en solitario con las aplicaciones construidas por enormes equipos y grandes empresas?
Construir productos SaaS ricos viene con desafíos técnicos como infraestructura, escalabilidad, disponibilidad, seguridad y subsistemas complicados como autenticación y pagos. Por eso, a menudo son los gigantes tecnológicos ya establecidos quienes pueden construir y operar productos de este tipo de manera razonable. Sin embargo, una nueva generación de devtools está permitiendo a los desarrolladores construir fácilmente soluciones completas que aprovechan la mejor infraestructura en la nube disponible, y ofrecen una experiencia que te permite iterar rápidamente en tus ideas por un bajo costo de $0. Se llevan todos los desafíos técnicos de construir y operar productos de software para que solo tengas que pasar tu tiempo construyendo las características que tus usuarios quieren, dándote una oportunidad razonable de competir contra el mercado al mantenerte increíblemente ágil y receptivo a las necesidades de los usuarios.
En esta masterclass de 3 horas comenzarás con una simple aplicación de gestión de tareas construida con React y Next.js y la convertirás en un producto SaaS completamente funcional y escalable integrando una base de datos escalable (PlanetScale), autenticación multi-tenant (Clerk), y pagos basados en suscripción (Stripe). También aprenderás cómo los principios del desarrollo de software ágil y el diseño impulsado por el dominio pueden ayudarte a construir productos rápidamente y de manera rentable, y competir con las soluciones existentes.