Política de seguridad de contenido

Información general

La integración de Datadog Content Security Policy (CSP) envía logs a Datadog desde los navegadores web a medida que interpretan tu CSP y detectan infracciones. Al utilizar la integración de CSP, no tienes que alojar ni gestionar un endpoint dedicado para agregar tus datos de CSP.

Para más información sobre CSP, véase Content-Security-Policy.

Requisitos previos

Antes de añadir una directiva a un encabezado de CSP, genera un token de cliente en tu cuenta de Datadog.

Por motivos de seguridad, debes utilizar un token de cliente para recopilar logs de los navegadores web. No puedes utilizar claves de API de Datadog para configurar el SDK de los logs de navegador de Datadog, ya que quedarían expuestas en el lado del cliente. Para más información, consulta la documentación del token de cliente.

Preparar una URL para CSP

Necesitas una URL a la que los navegadores puedan enviar informes de infracción de la política. La URL debe tener el siguiente formato:

https:///api/v2/logs?dd-api-key=<client-token>&dd-evp-origin=content-security-policy&ddsource=csp-report

Opcionalmente, añade la clave ddtags (nombre de servicio, el entorno y la versión de servicio) a la URL para configurar el etiquetado unificado de servicios:

  • env: el entorno de la aplicación.
  • service: el nombre de servicio para tu aplicación.
  • version: la versión de la aplicación.

Al formatear los valores de ddtags, debes:

  • Agrupar claves y valores con dos puntos (:)
  • Concatenar claves y valores con una coma (,)
  • Utilizar la codificación de URL

Por ejemplo, dados los pares clave-valor {"service": "billingService", "env": "production"}, la cadena codificada en URL tendría el siguiente aspecto:

service%3AbillingService%2Cenv%3Aproduction

Y la URL final con etiquetas sería:

https:///api/v2/logs?dd-api-key=<client-token>&dd-evp-origin=content-security-policy&ddsource=csp-report&ddtags=service%3AbillingService%2Cenv%3Aproduction

Añadir la URL a CSP

Puedes integrar la URL en un encabezado HTTP (recomendado), o integrarla en una etiqueta HTML <meta>.

Integrar la política en un encabezado HTTP

Datadog recomienda integrar la Content Security Policy en un encabezado HTTP. Puedes utilizar la directiva report-uri o la directiva reporting-endpoints. La directiva reporting-endpoints sustituirá con el tiempo a report-uri, pero aún no es compatible con todos los navegadores.

  • Si utilizas la directiva report-uri:

    Content-Security-Policy: ...; report-uri https:///api/v2/logs?dd-api-key=<client-token>&dd-evp-origin=content-security-policy&ddsource=csp-report
    
  • Si utilizas la directiva reporting-endpoints:

    Content-Security-Policy: ...; report-to browser-intake-datadoghq
    Reporting-Endpoints: browser-intake-datadoghq="https:///api/v2/logs?dd-api-key=<client-token>&dd-evp-origin=content-security-policy&ddsource=csp-report"
    

La política integrada en una etiqueta HTML <meta>

También puedes integrar la URL en una etiqueta HTML <meta>.

<meta http-equiv="Content-Security-Policy"
    content="...; report-uri 'https:///api/v2/logs?dd-api-key=<client-token>&dd-evp-origin=content-security-policy&ddsource=csp-report'">

Ejemplos de informes de infracción

Cada navegador interpreta el formato del informe de forma diferente:

{
  'csp-report': {
    'blocked-uri': 'https://evil.com/malicious.js',
    'document-uri': 'http://localhost:8000/',
    'original-policy': 'script-src http://good.com; report-uri http://127.0.0.1:8000/csp_reports',
    referrer: '',
    'violated-directive': 'script-src'
  }
}
{
  'csp-report': {
    'document-uri': 'http://localhost:8000/',
    referrer: '',
    'violated-directive': 'script-src-elem',
    'effective-directive': 'script-src-elem',
    'original-policy': 'trusted-types toto; script-src good.com; report-uri http://127.0.0.1:8000/csp_reports',
    disposition: 'enforce',
    'blocked-uri': 'https://evil.com/malicious.js',
    'status-code': 200,
    'script-sample': ''
  }
}
{
  'csp-report': {
    'document-uri': 'http://localhost:8000/',
    referrer: '',
    'violated-directive': 'script-src good.com',
    'effective-directive': 'script-src',
    'original-policy': 'trusted-types toto; script-src good.com; report-uri http://127.0.0.1:8000/csp_reports',
    'blocked-uri': 'https://evil.com',
    'status-code': 200
  }
}

Utilizar CSP con Real User Monitoring y Session Replay

Si utilizas CSP en tus sitios web, añade las siguientes URL a tus directivas existentes en función de tu caso de uso.

URL de admisión

Según la opción site utilizada para inicializar Real User Monitoring o la recopilación de logs de navegador, añade la entrada connect-src apropiada:

connect-src https://

Worker web

Si estás utilizando Session Replay o el parámetro de inicialización compressIntakeRequests de RUM, asegúrate de permitir workers con esquemas de URI blob: añadiendo la siguiente entrada worker-src:

worker-src blob:;

Alternativamente, a partir de la versión 4.47.0, puedes autoalojar el archivo JavaScript del worker del SDK de navegador de Datadog y proporcionar la opción workerUrl para inicializar el SDK del RUM Browser realizando una de las siguientes acciones:

Requisitos:

  • Asegúrate de que la versión principal del worker coincide con la versión del SDK del navegador que estás utilizando.
  • Aloja el archivo en el mismo origen que tu aplicación web. Debido a restricciones del navegador, no se puede alojar en un dominio separado (por ejemplo, un host de CDN de terceros) o un esquema diferente.

URL del paquete de CDN

Si utilizas la configuración CDN async o CDN sync para Real User Monitoring o la recopilación de los logs de navegador, añade también la siguiente entrada script-src:

script-src https://www.datadoghq-browser-agent.com

Referencias adicionales