Introducción
La política de seguridad de contenido (CSP) es un estándar de seguridad web con una amplia compatibilidad, diseñado para prevenir determinados tipos de ataques de inyección de datos. A tal fin, permite que los desarrolladores controlen los recursos cargados por sus aplicaciones. En esta guía se explica cómo implementar Google Tag Manager en un sitio que tiene una CSP.
Habilitar el fragmento de Google Tag Manager
Si quieres usar Google Tag Manager en una página que tiene una CSP, dicha política debe permitir que se ejecute el fragmento de Google Tag Manager, que consiste en un fragmento de JavaScript insertado que inyecta la secuencia de comandos gtm.js
. Hay varias formas de habilitar el fragmento de Google Tag Manager; por ejemplo, utilizando un nonce o un hash. Se recomienda usar un nonce, es decir, un valor aleatorio e impredecible que el servidor genera para cada respuesta. Añade el valor nonce a la directiva script-src
de la CSP:
Content-Security-Policy: script-src 'nonce-{SERVER-GENERATED-NONCE}'; img-src www.googletagmanager.com
A continuación, usa la versión basada en nonce del fragmento de Google Tag Manager insertado. Para ello, en el elemento de secuencia de comandos insertado, asigna al atributo nonce este valor:
<!-- Google Tag Manager -->
<script nonce='{SERVER-GENERATED-NONCE}'>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;var n=d.querySelector('[nonce]');
n&&j.setAttribute('nonce',n.nonce||n.getAttribute('nonce'));f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-{YOUR-CONTAINER-ID}');</script>
<!-- End Google Tag Manager -->
Google Tag Manager aplicará el nonce en todas las secuencias de comandos que añada a la página.
Existen otros métodos para habilitar la ejecución de una secuencia de comandos insertada, como añadir el hash de la secuencia de comandos insertada a la CSP. Para obtener más información, consulta la documentación de la CSP.
Si no es posible utilizar un nonce o un hash, puedes habilitar la secuencia de comandos insertada de Google Tag Manager añadiendo la directiva 'unsafe-inline'
a la sección script-src
de la CSP.
Para aplicar este método, se necesitan las siguientes directivas en la CSP:
script-src: 'unsafe-inline' https://www.googletagmanager.com
img-src: www.googletagmanager.com
Variables de JavaScript personalizadas
Debido a la forma en que se implementan las variables de JavaScript personalizadas, estas tendrán el valor undefined
en caso de que haya una CSP, a menos que se añada la directiva 'unsafe-eval'
a la sección script-src
de la CSP.
script-src: 'unsafe-eval'
Modo de vista previa
Para utilizar el modo de vista previa de Google Tag Manager, la CSP debe incluir las siguientes directivas:
script-src: https://tagmanager.google.com
style-src: https://tagmanager.google.com https://fonts.googleapis.com
img-src: https://ssl.gstatic.com https://www.gstatic.com
font-src: https://fonts.gstatic.com data:
Universal Analytics (Google Analytics)
Para usar la etiqueta de Universal Analytics (Google Analytics), la CSP debe incluir las siguientes directivas:
script-src: https://www.google-analytics.com https://ssl.google-analytics.com
img-src: https://www.google-analytics.com
connect-src: https://www.google-analytics.com
Google Optimize
Para usar una etiqueta de Google Optimize, la CSP debe incluir las siguientes directivas:
script-src: https://www.google-analytics.com
Conversiones de Google Ads
Para usar una etiqueta de conversión de Google Ads, la CSP debe incluir las siguientes directivas:
Con conexiones seguras:
script-src: https://www.googleadservices.com https://www.google.com
img-src: https://googleads.g.doubleclick.net https://www.google.com
Con conexiones no seguras:
script-src: www.googleadservices.com www.google.com
img-src: googleads.g.doubleclick.net www.google.com
Remarketing de Google Ads
Para usar una etiqueta de remarketing de Google Ads, la CSP debe incluir las siguientes directivas:
Con conexiones seguras:
script-src: https://www.googleadservices.com https://googleads.g.doubleclick.net https://www.google.com
img-src: https://www.google.com
frame-src: https://bid.g.doubleclick.net
Con conexiones no seguras:
script-src: www.googleadservices.com googleads.g.doubleclick.net www.google.com
img-src: www.google.com
frame-src: bid.g.doubleclick.net