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

This ad is not shown to multipass and full ticket holders
React Summit US
React Summit US 2025
November 18 - 21, 2025
New York, US & Online
The biggest React conference in the US
Learn More
In partnership with Focus Reactive
Upcoming event
React Summit US 2025
React Summit US 2025
November 18 - 21, 2025. New York, US & Online
Learn more
Bookmark
Project website
Rate this content

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 Summary and Transcription
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.

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.

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

Short description:

Y voy a tomar este ejemplo que ya está añadiendo denounce. Y habrá casos en los que necesites scripts en línea. Y para esos escenarios, denounce permitirá que tus scripts se ejecuten sin perder la seguridad de tu CSV. Y denounce es solo una cadena, un hash creado para un solo uso. Así que veamoslo en acción.

Y voy a tomar este ejemplo que ya está añadiendo denounce. Y habrá casos en los que necesites scripts en línea. Y para esos escenarios, denounce permitirá que tus scripts se ejecuten sin perder la security de tu CSV. Y denounce es solo una cadena, un hash creado para un solo uso. Así que veamoslo en acción.

Voy a copiar estos basados en el middleware. De hecho, preparé una política de contenido security personalizada aquí, más simple que esta. Así que voy a reemplazar eso. Y otra cosa que quiero hacer es añadir algunas reglas condicionalmente. Así que voy a añadir este pequeño código aquí, para comprobar cuál es mi entorno. Si no es producción, asumiré que es desarrollo. Y si es desarrollo, puedo perder mi CSP. Si es producción, puedo hacerlo más estricto. Así que guardé.

Vamos al paso número cuatro, y hagamos una pequeña limpieza. Vamos a la configuración de Next, y de hecho, eliminemos la política de security de contenido de allí. Voy a guardar esto. Debería verse así, exactamente como está en nuestro middleware. Y veamos cómo está funcionando la aplicación ahora. Prácticamente lo mismo. Recarguemos para asegurarnos. Comprobemos si la política de security de contenido, se muestra en los encabezados. Oh, está cargando. Aquí vamos, política de security de contenido. Todo lo que añadimos, incluyendo los now's. Comprobemos el encabezado xnow's. También está aquí, porque estamos añadiendo el encabezado en esta línea. Ahora necesitamos validar nuestra política de security de contenido, y para eso podemos usar prácticamente dos sitios web. Uno, puedes simplemente copiar tu política de security de contenido y pegarla en el de Google. Voy a eliminar esta pequeña condición, de lo contrario no va a funcionar, y comprobar.

4. Uso de informes de seguridad de contenido

Short description:

Puedes utilizar un informe de seguridad de contenido para identificar problemas en tu aplicación y mejorar su seguridad. Al agregar tu dominio, puedes generar un informe que proporciona información sobre lo que necesita mejora o corrección. Además, puedes modificar tu política de seguridad de contenido para permitir recursos específicos, como imágenes, sin romper tu aplicación. Aprovecha este informe para mejorar la seguridad de tu aplicación web.

Te dará prácticamente un informe de todo lo que necesitamos mejorar o hacer mejor o tal vez algo falta o está mal. Puedes agregar tu dominio aquí si quieres. Luego también tienes Mozilla, así que vamos a comprobar apple.com por ejemplo. Aquí vamos, tienes tu informe de seguridad de contenido con un montón de otra información sobre la seguridad de tu sitio web.

Pero una cosa que deberíamos hacer aquí que olvidé, es agregar realmente el dominio de React Summit a mi directiva de imagen. De esta manera, podría ver realmente la imagen cargada. Así que vamos a comprobar nuestra aplicación una vez más. Esperemos a la recarga en caliente y aquí vamos. Aquí está la imagen porque ahora mi política de seguridad de contenido lo permite.

Ahora, un consejo extra, no necesitas romper tu aplicación. Puedes simplemente usar un informe de seguridad de contenido para identificar los problemas en tu aplicación. Y una vez que sepas qué está pasando, puedes entonces hacer cumplir y prevenir que tu aplicación se rompa mientras añades una nueva capa de seguridad para aumentar la seguridad de tu aplicación web. Gracias. Espero que encuentres útil este contenido y puedas mejorar la seguridad de tus aplicaciones. Puedes encontrar esa aplicación de muestra en mi GitHub y feliz codificación.

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 2022React Advanced 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 2023React Advanced 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.
El Nuevo Router de Aplicaciones Next.js
React Summit 2023React Summit 2023
27 min
El Nuevo Router de Aplicaciones Next.js
Top Content
Today's Talk is about the Next.js App Router, which has evolved over the years and is now a core feature of Next.js. The Talk covers topics such as adding components, fetching remote data, and exploring layouts. It also discusses submitting form data, simplifying code, and reusing components. The App Router allows for coexistence with the existing pages router and enables data fetching at the layout level using React Server Components.

Workshops on related topic

Aventuras de Renderizado Concurrente en React 18
React Advanced 2021React Advanced 2021
132 min
Aventuras de Renderizado Concurrente en React 18
Top Content
Featured Workshop
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.
AI para Desarrolladores de React
React Advanced 2024React Advanced 2024
142 min
AI para Desarrolladores de React
Top Content
Featured Workshop
Eve Porcello
Eve Porcello
El conocimiento de las herramientas de AI es fundamental para preparar el futuro de las carreras de los desarrolladores de React, y la suite de herramientas de AI de Vercel es una vía de acceso accesible. En este curso, examinaremos más de cerca el Vercel AI SDK y cómo esto puede ayudar a los desarrolladores de React a construir interfaces de transmisión con JavaScript y Next.js. También incorporaremos APIs de terceros adicionales para construir y desplegar una aplicación de visualización de música.
Temas:- Creación de un Proyecto de React con Next.js- Elección de un LLM- Personalización de Interfaces de Transmisión- Construcción de Rutas- Creación y Generación de Componentes - Uso de Hooks (useChat, useCompletion, useActions, etc)
Tracing: Frontend Issues With Backend Solutions
React Summit US 2024React Summit US 2024
112 min
Tracing: Frontend Issues With Backend Solutions
Top Content
Featured WorkshopFree
Lazar Nikolov
Sarah Guthals
2 authors
Los problemas de frontend que afectan a tus usuarios a menudo son provocados por problemas de backend. En esta masterclass, aprenderás cómo identificar problemas que causan páginas web lentas y malos Core Web Vitals usando tracing.
Luego, pruébalo tú mismo configurando Sentry en un proyecto Next.js ya preparado para descubrir problemas de rendimiento, incluyendo consultas lentas a la base de datos en una sesión interactiva de programación en pareja.
Saldrás de la masterclass siendo capaz de:- Encontrar problemas de backend que podrían estar ralentizando tus aplicaciones de frontend- Configurar tracing con Sentry en un proyecto Next.js- Depurar y solucionar problemas de rendimiento deficiente usando tracing
Este será un evento en vivo de 2 horas donde tendrás la oportunidad de codificar junto con nosotros y hacernos preguntas.
Masterclass Práctica: Introducción a Pentesting para Aplicaciones Web / APIs Web
JSNation US 2024JSNation US 2024
148 min
Masterclass Práctica: Introducción a Pentesting para Aplicaciones Web / APIs Web
Featured Workshop
Gregor Biswanger
Gregor Biswanger
En esta masterclass práctica, estarás equipado con las herramientas para probar efectivamente la seguridad de las aplicaciones web. Este curso está diseñado tanto para principiantes como para aquellos que ya están familiarizados con las pruebas de seguridad de aplicaciones web y desean ampliar su conocimiento. En un mundo donde los sitios web juegan un papel cada vez más central, asegurar la seguridad de estas tecnologías es crucial. Comprender la perspectiva del atacante y conocer los mecanismos de defensa apropiados se han convertido en habilidades esenciales para los profesionales de TI.Esta masterclass, dirigida por el renombrado entrenador Gregor Biswanger, te guiará a través del uso de herramientas de pentesting estándar de la industria como Burp Suite, OWASP ZAP y el marco profesional de pentesting Metasploit. Aprenderás a identificar y explotar vulnerabilidades comunes en aplicaciones web. A través de ejercicios prácticos y desafíos, podrás poner en práctica tu conocimiento teórico y expandirlo. En este curso, adquirirás las habilidades fundamentales necesarias para proteger tus sitios web de ataques y mejorar la seguridad de tus sistemas.
El Viaje Desde el Frontend con React al Desarrollo Fullstack Con Next.js
React Summit 2025React Summit 2025
91 min
El Viaje Desde el Frontend con React al Desarrollo Fullstack Con Next.js
Featured Workshop
Eric Burel
Eric Burel
Únete a nosotros en el viaje desde el desarrollo frontend con React hasta el desarrollo fullstack con Next.js. Durante esta masterclass, seguiremos el tutorial oficial de Next.js Learn con Eric Burel, entrenador profesional y autor de NextPatterns.dev. Juntos, configuraremos un sitio web con Next.js y exploraremos sus características del lado del servidor para construir aplicaciones de alto rendimiento.
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
Workshop
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.