Una directiva de seguridad de contenido (CSP) es una función de seguridad que ayuda a evitar ataques de secuencias de comandos entre sitios (XSS). Esto sucede cuando se engaña al explorador para que ejecute contenido malicioso que parece provenir de una fuente de confianza, pero que realmente proviene de otro lugar. Los CSP permiten al navegador (en nombre del usuario) verificar que el script viene de una fuente de confianza.
Los CSP se implementan agregando un encabezado HTTP Content-Security-Policy
a las respuestas del servidor o agregando un elemento <meta>
configurado en la sección <head>
de los archivos HTML.
Para obtener información más detallada sobre los CSP, consulte los documentos web de MDN.
Como sistema de administración de etiquetas, Adobe Experience Platform Launch está diseñado para cargar dinámicamente scripts en su sitio web. Un CSP predeterminado bloquea estas secuencias de comandos cargadas dinámicamente debido a posibles problemas de seguridad. Este documento proporciona instrucciones sobre cómo configurar el CSP para permitir scripts cargados dinámicamente desde Platform Launch.
Si quiere que Adobe Experience Platform Launch funcione con su CSP, existen dos desafíos principales que se deben superar:
Si desea utilizar Platform Launch y dispone de un CSP, debe corregir ambos problemas sin marcar incorrectamente otros scripts como seguros. El aumento de la seguridad significa aumentar también la cantidad de trabajo por su parte.
Si desea utilizar Platform Launch y dispone de un CSP, debe corregir ambos problemas sin marcar incorrectamente otros scripts como seguros. El resto de este documento ofrece instrucciones sobre cómo lograrlo.
Al utilizar un CSP, debe incluir todos los dominios de confianza dentro del valor del encabezado Content-Security-Policy
. El valor que debe proporcionar Platform Launch variará según el tipo de alojamiento que utilice.
Si está alojando su biblioteca usted mismo, la fuente de su biblioteca es probablemente su propio dominio. Puede especificar que el dominio host es un origen seguro mediante la siguiente configuración:
Encabezado HTTP
Content-Security-Policy: script-src 'self'
Etiqueta <meta>
HTML
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
Si utiliza un host administrado por Adobe, la compilación se mantiene en assets.adobedtm.com
. Debe especificar self
como dominio seguro para que no se rompan los scripts que ya se están cargando, pero también necesita que assets.adobedtm.com
aparezca como seguro o la biblioteca de Platform Launch no se cargará en la página. En este caso, debe utilizar la siguiente configuración:
Encabezado HTTP
Content-Security-Policy: script-src 'self' assets.adobedtm.com
Etiqueta <meta>
HTML
Hay un requisito previo muy importante: debe cargar la biblioteca de Platform Launch asincrónicamente. Esto no funciona con una carga sincrónica de la biblioteca de Platform Launch (lo que provoca errores de consola y reglas que no se ejecutan correctamente).
<meta http-equiv="Content-Security-Policy" content="script-src 'self' assets.adobedtm.com">
Debe especificar self
como dominio seguro para que no se rompan los scripts que ya se están cargando, pero también necesita que assets.adobedtm.com
aparezca como origen seguro o la compilación de la biblioteca no se cargará en la página.
CSP deshabilita los scripts en línea de forma predeterminada y, por lo tanto, debe configurarse manualmente para permitirlos. Tiene dos opciones para permitir scripts en línea:
La especificación CSP tiene detalles para una tercera opción mediante hashes, pero este método no es viable con sistemas de administración de etiquetas como Platform Launch. Para obtener más información sobre las limitaciones del uso de hashes en Platform Launch, consulte la guía Integridad de subrecursos (SRI).
Este método implica generar una cadena nonce criptográfica y agregarla a su CSP y a cada script en línea de su sitio. Cuando el explorador recibe una instrucción para cargar un script en línea con una cadena nonce, el explorador compara el valor nonce con el contenido en el encabezado CSP. Si coincide, se carga la secuencia de comandos. Esta cadena nonce debe cambiarse con cada nueva carga de página.
Para utilizar este método, debe cargar la compilación asincrónicamente. Esto no funciona al cargar la compilación sincrónicamente, lo que provoca que los errores de la consola y las reglas no se ejecuten correctamente. Consulte la guía de implementación asincrónica para obtener más información.
Los ejemplos siguientes muestran cómo se puede agregar nonce a la configuración CSP para un host administrado por Adobe. Si utiliza alojamiento propio, puede excluir assets.adobedtm.com
.
Encabezado HTTP
Content-Security-Policy: script-src 'self' assets.adobedtm.com 'nonce-2726c7f26c'
Etiqueta <meta>
HTML
<meta http-equiv="Content-Security-Policy" content="script-src 'self' assets.adobedtm.com 'nonce-2726c7f26c'">
Una vez configurado el encabezado o la etiqueta HTML, debe indicar a Platform Launch dónde buscar la cadena nonce al cargar un script en línea. Para que Platform Launch use el nonce cuando carga el script, debe:
El proceso anterior solo controla la carga del código personalizado, no lo que hace ese código personalizado. Si un script en línea contiene código personalizado que no es compatible con el CSP, este tiene prioridad. Por ejemplo, si utiliza un código personalizado para cargar scripts en línea anexándolos al DOM, Platform Launch no podrá añadir el nonce correctamente, así que la acción de ese código personalizado en particular no funcionará como se esperaba.
Si usar nonces no funciona, puede configurar su CSP para que permita los scripts en línea. Esta es la opción menos segura, pero también más fácil de implementar y mantener.
Los ejemplos siguientes muestran cómo se pueden permitir todos los scripts en línea en el encabezado CSP.
Utilice las siguientes configuraciones si utiliza el alojamiento propio:
Encabezado HTTP
Content-Security-Policy: script-src 'self' 'unsafe-inline'
Etiqueta <meta>
HTML
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'">
Utilice las siguientes configuraciones si utiliza alojamiento administrado por Adobe:
Encabezado HTTP
Content-Security-Policy: script-src 'self' assets.adobedtm.com 'unsafe-inline'
Etiqueta <meta>
HTML
<meta http-equiv="Content-Security-Policy" content="script-src 'self' assets.adobedtm.com 'unsafe-inline'">
Al leer este documento, ahora debe comprender cómo configurar el encabezado CSP para aceptar el archivo de biblioteca de Platform Launch y los scripts en línea.
Como medida de seguridad adicional, también puede optar por utilizar la integridad de los subrecursos (SRI) para validar las compilaciones de biblioteca recuperadas. Sin embargo, esta función tiene algunas limitaciones importantes cuando se utiliza con sistemas de administración de etiquetas como Platform Launch. Consulte la guía sobre la compatibilidad con SRI en Platform Launch para obtener más información.