Política de seguridad de contenido
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.
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'">
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:
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
:
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
Más enlaces, artículos y documentación útiles: