Как использовать Менеджер тегов с Content Security Policy

Content Security Policy (CSP) – это широко поддерживаемый стандарт веб-безопасности. Он позволяет разработчикам выбирать, какие ресурсы могут загружаться приложениями, и тем самым предотвращать определенные типы атак с внедрением кода. В этом руководстве объясняется, как использовать Google Менеджер тегов на сайте с CSP.

Настройка тега-контейнера для работы с CSP

Чтобы использовать Google Менеджер тегов на странице с CSP, разрешите выполнение кода-контейнера Менеджера тегов, который является встроенным кодом JavaScript и внедряет скрипт gtm.js. Это можно сделать несколькими способами, например с помощью однократно используемого числа (nonce) или хеша. Рекомендуем использовать значение nonce – случайное число, которое сервер генерирует отдельно для каждого ответа. Укажите значение nonce в директиве CSP script-src:

Content-Security-Policy: script-src 'nonce-{SERVER-GENERATED-NONCE}'; img-src www.googletagmanager.com

Затем используйте версию встроенного кода Google Менеджера тегов с поддержкой числа nonce и укажите то же значение для атрибута nonce во встроенном элементе скрипта.

<!-- 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-XXXXXX');</script>
<!-- End Google Tag Manager -->

Тогда число nonce будут содержать все скрипты, добавляемые Менеджером тегов на страницу.

Разрешить выполнение встроенного скрипта можно и другими способами, например добавив хеш встроенного скрипта в CSP.

Если эти рекомендуемые способы не подходят, вы можете разрешить выполнение встроенного скрипта Менеджера тегов, добавив директиву 'unsafe-inline' в раздел script-src CSP.

Чтобы воспользоваться этим способом, добавьте в CSP такие директивы:

script-src: 'unsafe-inline' https://www.googletagmanager.com
img-src: www.googletagmanager.com

Пользовательские переменные JavaScript

Пользовательские переменные JavaScript будут иметь значение undefined, если в разделе script-src CSP не указана директива 'unsafe-eval'. Это связано с особенностями реализации таких переменных.

script-src: 'unsafe-eval'

Режим предварительного просмотра

Чтобы использовать режим предварительного просмотра Google Менеджера тегов, необходимо включить в правила защиты контента следующие директивы:

script-src: https://googletagmanager.com https://tagmanager.google.com
style-src: https://googletagmanager.com https://tagmanager.google.com https://fonts.googleapis.com
img-src: https://googletagmanager.com https://ssl.gstatic.com https://www.gstatic.com
font-src: https://fonts.gstatic.com data:

Google Аналитика 4 (Google Аналитика)

Чтобы использовать тег Google Аналитики 4 (Google Аналитики), необходимо включить в CSP следующие директивы:

script-src:  https://*.googletagmanager.com
img-src:     https://*.google-analytics.com https://*.googletagmanager.com
connect-src: https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com

Для развертывания Google Аналитики 4 (Google Аналитики) с использованием сигналов Google необходимо включить в CSP следующие директивы:

script-src:  https://*.googletagmanager.com
img-src:     https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com
             https://*.g.doubleclick.net https://*.google.com https://*.google.<TLD>
connect-src: https://*.google-analytics.com https://*.analytics.google.com
             https://*.googletagmanager.com https://*.g.doubleclick.net https://*.google.com https://*.google.<TLD>

Universal Analytics (Google Аналитика)

Чтобы использовать тег Universal Analytics (Google Аналитики), необходимо включить в CSP следующие директивы:

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 Рекламы, необходимо включить в CSP следующие директивы:

Для защищенных подключений:

script-src: https://www.googleadservices.com https://www.google.com
img-src: https://googleads.g.doubleclick.net https://www.google.com https://google.com

Для незащищенных подключений:

script-src: www.googleadservices.com www.google.com
img-src: googleads.g.doubleclick.net www.google.com google.com

Чтобы использовать тег ремаркетинга Google Рекламы, необходимо включить в CSP следующие директивы:

Для защищенных подключений:

script-src: https://www.googleadservices.com https://googleads.g.doubleclick.net https://www.google.com
img-src: https://www.google.com https://google.com
frame-src: https://bid.g.doubleclick.net

Для незащищенных подключений:

script-src: www.googleadservices.com googleads.g.doubleclick.net www.google.com
img-src: www.google.com google.com
frame-src: bid.g.doubleclick.net

Floodlight

Пользователи Floodlight могут включить CSP с помощью приведенных ниже конфигураций. Вместо значения <FLOODLIGHT-CONFIG-ID> необходимо указать идентификатор рекламодателя Floodlight или символ звездочки (*), обозначающий любой идентификатор.

Для всех пользователей:

img-src: https://<FLOODLIGHT-CONFIG-ID>.fls.doubleclick.net

Для пикселей отслеживания собственных скриптов в Менеджере тегов:

frame-src: https://<FLOODLIGHT-CONFIG-ID>.fls.doubleclick.net

Для тегов изображений:

img-src: https://ad.doubleclick.net

Для режима согласия:

img-src: https://ade.googlesyndication.com