javascript #security #google-tag-manager #code-injection
#javascript #Безопасность #google-tag-manager #внедрение кода
Вопрос:
Алиса производит продукт
- Она отображает информацию о продукте здесь:
alice.com/product-001
- Она установила кнопку
[Purchase now]
, указывающую на страницу оформления заказа.
Боб запускает службу оформления заказа
- Алиса заключила контракт на его услуги.
- Алиса настроила продукт 001 в службе Боба
- Система Боба создает 2 соответствующих URL-адреса:
- Чтобы инициировать проверку:
bob.com/pay/product-001
- Страница благодарности:
bob.com/thank-you/product-001
- Чтобы инициировать проверку:
Чарли является партнером этого продукта
- У Чарли есть менеджер тегов Google с идентификатором
GTM-999999
- Чарли соглашается с Алисой и Бобом, что его
affiliateId
будет777
. - Чарли хочет отслеживать воронку продаж на 3 страницах (product checkout-init checkout-complete), чтобы оптимизировать свой бюджет.
- И Алиса, и Боб соглашаются получать идентификатор партнера в URL.
- Если
?affiliateId=777
он добавлен на любую из 3 страниц, то Алиса и Боб отобразят тегGTM-999999
вместе со своими собственными GTM, если они уже установлены.
Это позволяет Чарли отправлять «пиксельные трекеры» (*) на страницы. Он может отправлять трекеры Facebook, Twitter, Google Analyics и т. Д. по его собственному желанию; а также любой другой «пиксель», который он создает сам.
(*) Мы все знаем, что название «пиксель» происходит из древних времен, когда мы устанавливали прозрачное изображение размером 1×1. Но теперь это не изображение. Это javascript и, следовательно, гораздо более мощный. Но также опасно.
Вопрос
Если Алиса и Боб отобразят GTM Чарли … сможет ли Чарли вводить ЛЮБОЙ javascript по своему усмотрению (например, для отслеживания сторонних файлов cookie или повторного отображения видимых блоков страницы или обхода DOM для обнаружения отображаемых там электронных писем)? Или GTM «отфильтровывает» то, что может быть отправлено или нет в браузер?
Ответ №1:
Это очень серьезная проблема. И да, Чарли сможет выполнять произвольные JS на этих страницах. Чтение / перезапись файлов cookie, изменение всего DOM, принудительное перенаправление людей на другие сайты. В принципе, много чего.
Поэтому Алисе и Бобу следует быть предельно осторожными, разрешая сторонние системы управления тегами. Ну, нет, они вообще не должны их разрешать.
Это делается по-другому. Другие способы рассмотрения:
- Предоставьте разработчикам Charlie доступ к GTM Боба и Алисы и предоставьте им права на запись. Вот информация о том, как это сделать: https://support.google.com/tagmanager/answer/6107011?hl=en и немного информации о разрешениях: https://support.google.com/tagmanager/answer/6107011?hl=en#container_permissions
- Сделайте несколько новых контейнеров GTM для Charlie. Билл создаст один и предоставит доступ на запись, Алиса создаст один и предоставит доступ на запись. Это похоже на предыдущее, но теперь вся логика Чарли находится в отдельном контейнере.
В обоих случаях доступ на запись для разработчиков Charlie подразумевает требование к разработчикам Боба и Алисы проверять изменения разработчиками Charlie. Однако во втором случае потребуется синхронизировать два контейнера на странице. Это может потребовать расширенных знаний GTM. В частности, определение имен трекеров для всех контейнеров, чтобы избежать смешивания данных. Но есть веская причина, по которой GTM не рекомендует определять трекеры. Когда вы определяете трекеры, GTM начинает вести себя по-другому. Если раньше вы могли ожидать, что каждый тег будет выполняться в своем собственном контексте, теперь вы не сможете этого сделать, поэтому многие поля, которые не были явно заданы для этого тега, но были установлены на предыдущий, будут унаследованы этим тегом, поэтому контекст станет постоянным. Это требует немного другого подхода к отслеживанию. Немного необычно. GTM предоставляет все инструменты, необходимые для его правильного размещения, но даже старшие разработчики GTM часто не обращают внимания на эти инструменты. И это приводит к ошибкам, с которыми сложнее справиться.
- Наконец, возможно, лучшим способом было бы, если бы Билл и Элис связали своих разработчиков с аналитиками Чарли и попросили их реализовать все, что требуется для отслеживания аналитиков. Обычно это не так много для партнеров, и именно так работает корпоративная аналитика в мире big corp. Поскольку Чарли является партнером, есть разумные основания ожидать, что партнеров будет больше. Теперь это позволяет разработчикам Bill’s и Alice создавать некоторые правила и полуавтоматические решения для полной интеграции партнеров с помощью аналитики. В итоге у них будет несколько таблиц поиска (или просто аккуратный JS var) и несколько тегов pixel / GA, использующих LUT для идентификаторов учетных записей.
Готово! Довольно прочная основа для поддержки практически неограниченного числа партнеров без значительных затрат на реализацию.
- Позволить Чарли и другим размещать свои контейнеры на страницах — верный путь к хаосу. Скорее всего, это займет больше времени и усилий, чем любой другой вариант.
Ответ №2:
GTM сам по себе не фильтрует, вы должны создать соответствующую настройку.
Разрешение загружать полный контейнер GTM звучит как перебор и довольно опасно, несмотря ни на что. Но вы можете создавать списки разрешений или списки запретов, чтобы ограничить развертывание тегов и разрешить только определенные категории тегов.
Список запретов должен исключать пользовательский HTML (javascript), иначе это бессмысленно (поскольку Чарли мог просто реализовать запрещенные пиксели через Javascript). Может быть сложно настроить это так, чтобы списки разрешений / запретов влияли только на контейнер Charlies, а не на ваш собственный.
Лучший способ — попросить Чарли предоставить пользовательский шаблон для его тега отслеживания. Пользовательские шаблоны в GTM используют «изолированный javascript», подмножество JS с доступом к некоторым API Google, что предотвращает опасные операции (например, доступ к DOM). Вы можете установить дополнительные разрешения на то, что разрешено делать тегу Charlies или нет (установка файлов cookie, отправка пикселей на определенные URL, загрузка скриптов и т. Д.).
Чтобы сделать это более явным, если вы позволяете третьей стороне отображать контейнер GTM под их контролем на вашем сайте, вы передаете контроль над своим сайтом m, и они могут красть данные, считывать файлы cookie, искажать ваш сайт и делать все остальное, что возможно с помощью Javascript.
Вы можете смягчить это с помощью списков запрещений и политик шаблонов, но гораздо лучшая идея — не допускать этого в первую очередь и искать менее навязчивое решение.
Кроме того, если вы находитесь в юрисдикции GDPR и ePrivacy direction, вам необходимо убедиться, что Чарли реализует свое отслеживание соответствующим образом, и вы никак не можете этого сделать.