Español

Aprenda cómo la Política de seguridad de contenido (CSP) mitiga eficazmente los ataques de Cross-Site Scripting (XSS), mejorando la seguridad web para una audiencia global.

Política de seguridad de contenido (CSP): Una guía completa para la prevención de XSS

En el panorama digital actual, la seguridad web es primordial. Los ataques de Cross-Site Scripting (XSS) siguen siendo una amenaza frecuente y peligrosa para las aplicaciones web a nivel mundial. La Política de seguridad de contenido (CSP) es un potente encabezado de respuesta HTTP que proporciona una capa adicional de seguridad, lo que ayuda a mitigar el riesgo de vulnerabilidades XSS. Esta guía ofrece una visión general completa de CSP, su implementación y las mejores prácticas para proteger sus aplicaciones web contra los ataques XSS.

¿Qué es Cross-Site Scripting (XSS)?

Cross-Site Scripting (XSS) es un tipo de ataque de inyección en el que se inyectan scripts maliciosos en sitios web de confianza y benignos. Los ataques XSS se producen cuando un atacante utiliza una aplicación web para enviar código malicioso, generalmente en forma de un script del lado del navegador, a un usuario final diferente. Los fallos que permiten que estos ataques tengan éxito están muy extendidos y se producen en cualquier lugar donde una aplicación web utilice la entrada de un usuario dentro de la salida que genera sin validarla ni codificarla.

Hay tres tipos principales de ataques XSS:

Los ataques XSS pueden tener graves consecuencias, entre ellas:

¿Qué es la Política de seguridad de contenido (CSP)?

La Política de seguridad de contenido (CSP) es una capa adicional de seguridad que ayuda a detectar y mitigar ciertos tipos de ataques, incluidos los ataques de Cross-Site Scripting (XSS) y de inyección de datos. CSP se implementa mediante un encabezado de respuesta HTTP que le permite controlar los recursos (por ejemplo, scripts, hojas de estilo, imágenes, fuentes, marcos) que el navegador puede cargar para una página específica. Al definir un CSP estricto, puede reducir significativamente la superficie de ataque de su aplicación web y dificultar que los atacantes inyecten código malicioso.

CSP funciona definiendo una lista blanca de fuentes desde las que el navegador puede cargar recursos. Cualquier recurso cargado desde una fuente no permitida explícitamente en el CSP será bloqueado por el navegador. Esto evita la ejecución de scripts no autorizados y reduce el riesgo de ataques XSS.

Cómo funciona CSP: Directivas y fuentes

CSP se configura utilizando una serie de directivas, cada una de las cuales especifica una política para un tipo particular de recurso. Cada directiva consta de un nombre seguido de una lista de fuentes permitidas. Estas son algunas de las directivas CSP más utilizadas:

Los valores de fuente de uso común incluyen:

Implementación de CSP

CSP se puede implementar de dos formas principales:

  1. Encabezado HTTP: El método preferido es configurar el servidor web para que envíe el encabezado de respuesta HTTP `Content-Security-Policy`. Esto le permite definir el CSP para cada página o recurso de su sitio web.
  2. Etiqueta <meta>: CSP también se puede definir utilizando una etiqueta <meta> en la sección <head> de su documento HTML. Sin embargo, este método es menos flexible y tiene limitaciones en comparación con el uso del encabezado HTTP. Por ejemplo, las directivas `frame-ancestors`, `sandbox` y `report-uri` no se pueden utilizar en las etiquetas meta HTML.

Uso del encabezado HTTP

Para implementar CSP mediante el encabezado HTTP, debe configurar su servidor web para que incluya el encabezado `Content-Security-Policy` en sus respuestas. Los pasos de configuración específicos variarán según el servidor web que utilice.

Aquí hay ejemplos para servidores web comunes:

Uso de la etiqueta <meta>

Para implementar CSP mediante la etiqueta <meta>, añada la siguiente etiqueta a la sección <head> de su documento HTML:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://example.com; style-src 'self' https://example.com; img-src 'self' data:;">

Consideraciones importantes:

Ejemplos de CSP

Aquí hay varios ejemplos de CSP con explicaciones:

  1. CSP básico:
  2. Content-Security-Policy: default-src 'self';

    Esta política permite recursos sólo del mismo origen.

  3. Permitir scripts de un dominio específico:
  4. Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com;

    Esta política permite recursos del mismo origen y scripts de `https://example.com`.

  5. Permitir estilos de una CDN:
  6. Content-Security-Policy: default-src 'self'; style-src 'self' https://cdn.example.com;

    Esta política permite recursos del mismo origen y estilos de `https://cdn.example.com`.

  7. Permitir imágenes de cualquier fuente:
  8. Content-Security-Policy: default-src 'self'; img-src *;

    Esta política permite recursos del mismo origen e imágenes de cualquier fuente (no recomendado para producción).

  9. Informes de violaciones de CSP:
  10. Content-Security-Policy: default-src 'self'; report-uri /csp-report-endpoint;

    Esta política permite recursos del mismo origen y envía informes de violaciones a `/csp-report-endpoint`. Se recomienda utilizar `report-to` en lugar de `report-uri`.

  11. Uso de `report-to` y `report-uri` juntos para la compatibilidad:
  12. Content-Security-Policy: default-src 'self'; report-uri /csp-report-endpoint; report-to csp-endpoint;
    Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint; report-to csp-endpoint;
    Report-To: {"group":"csp-endpoint","max_age":10886400,"endpoints":[{"url":"/csp-report-endpoint"}]}

    Este ejemplo demuestra la configuración de un `report-uri` (para navegadores antiguos) y un punto final `report-to`, junto con la configuración del propio encabezado `Report-To`. Asegúrese de que su servidor gestione correctamente el encabezado `Report-To`, estableciendo correctamente el `group`, `max_age` y `endpoints`.

  13. Uso de Nonces para scripts en línea:
  14. Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-rAnd0mN0nc3Str1nG';

    Esta política permite recursos del mismo origen y scripts en línea con el atributo nonce coincidente.

    <script nonce="rAnd0mN0nc3Str1nG">
      // Su código de script en línea aquí
    </script>

CSP en modo solo informe

CSP se puede implementar en dos modos:

El modo Solo informe es útil para probar y refinar su CSP antes de aplicarlo. Para habilitar el modo Solo informe, utilice el encabezado HTTP `Content-Security-Policy-Report-Only` en lugar del encabezado `Content-Security-Policy`.

Ejemplo:

Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint;

Esta configuración enviará informes a `/csp-report-endpoint` sin bloquear ningún recurso.

Mejores prácticas para la implementación de CSP

Aquí hay algunas de las mejores prácticas para implementar CSP de manera efectiva:

  1. Comience con una política estricta: Comience con una política restrictiva que sólo permita recursos del mismo origen y relájela gradualmente según sea necesario.
  2. Utilice Nonces o hashes para scripts y estilos en línea: Evite el uso de `'unsafe-inline'` y utilice nonces o hashes para permitir scripts y estilos en línea específicos.
  3. Evite `'unsafe-eval'`: Si es posible, evite el uso de `'unsafe-eval'` ya que puede introducir riesgos de seguridad. Considere enfoques alternativos para la ejecución de código dinámico.
  4. Utilice HTTPS: Asegúrese de que todos los recursos se carguen a través de HTTPS para evitar ataques de intermediarios. Utilice la directiva `upgrade-insecure-requests` para actualizar automáticamente las solicitudes inseguras.
  5. Supervise las violaciones de CSP: Configure un punto final de informes para supervisar las violaciones de CSP e identificar posibles problemas de seguridad.
  6. Pruebe su CSP a fondo: Pruebe su CSP en diferentes navegadores y entornos para asegurarse de que funciona como se espera.
  7. Itere y refina: La implementación de CSP es un proceso iterativo. Supervise y refine continuamente su CSP a medida que evoluciona su aplicación.
  8. Considere la directiva `strict-dynamic`: Utilice `strict-dynamic` para reducir la complejidad de su CSP propagando la confianza a los scripts cargados por scripts confiables.

Herramientas para CSP

Varias herramientas pueden ayudarle a generar, probar y supervisar CSP:

CSP y marcos/bibliotecas

Cuando utilice marcos y bibliotecas, es importante configurar CSP correctamente para garantizar la compatibilidad y evitar problemas de seguridad. Aquí hay algunas consideraciones:

CSP y CDN (Redes de entrega de contenido)

Las CDN se utilizan comúnmente para alojar activos estáticos como archivos JavaScript, hojas de estilo CSS e imágenes. Para permitir recursos de las CDN en su CSP, debe incluir explícitamente en la lista blanca los dominios de las CDN.

Ejemplo:

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.jsdelivr.net; style-src 'self' https://cdnjs.cloudflare.com;

Esta política permite scripts de jsDelivr y estilos del cdnjs de Cloudflare.

Errores comunes de CSP que deben evitarse

Estos son algunos errores comunes de CSP que debe evitar:

Conceptos avanzados de CSP

Más allá de lo básico, varios conceptos avanzados de CSP pueden mejorar aún más su seguridad web:

El futuro de CSP

CSP evoluciona constantemente para hacer frente a los nuevos desafíos de seguridad. Los desarrollos futuros pueden incluir:

Conclusión

La Política de seguridad de contenido (CSP) es una herramienta poderosa para mitigar los ataques XSS y mejorar la seguridad web. Al definir una CSP estricta, puede reducir significativamente la superficie de ataque de su aplicación web y proteger a sus usuarios de código malicioso. La implementación efectiva de CSP requiere una planificación cuidadosa, pruebas exhaustivas y supervisión continua. Siguiendo las mejores prácticas descritas en esta guía, puede aprovechar CSP para mejorar la postura de seguridad de sus aplicaciones web y salvaguardar su presencia en línea en el ecosistema digital global.

Recuerde revisar y actualizar periódicamente su CSP para adaptarse a las amenazas de seguridad en evolución y asegurarse de que sus aplicaciones web permanezcan protegidas.

Política de seguridad de contenido (CSP): Una guía completa para la prevención de XSS | MLOG