1

Из соображений безопасности нам необходимо удалить unsafe-eval из заголовка политики безопасности контента в нашем приложении. Но после его удаления, мы получим ошибку консоли говоряОшибка консоли администратора тегов Google после удаления небезопасного eval из заголовка CSP

вызова Eval() или связанной функцию заблокированного ПСУ

Мы добавили «https://www.googletagmanager.com» домен к script-src, а также, но все-таки это запрашивает ошибку.

Есть ли способ разрешить только unsafe-eval для домена менеджера тегов Google? Или будет другая альтернатива?

Образец Аналитическое фрагмент кода ниже, что мы используем в нашем сценарии

(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 = 
       '//www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 
})(window, document, 'script', 'dataLayer', 'GTM-123456'); 

ответ

2

Согласно this Lunametrics article GTM использует Eval для персонализированного кода JavaScript переменные:

[...] ваши сценарии могут выполнить немного медленнее в результате, так как там теперь будет дополнительной переменной eval() для пользовательской переменной JavaScript , согласно которой вы передаете свои аргументы

В самом деле, когда я добавить настраиваемое JS переменную в контейнер, который не имеет каких-либо до того, как следующий фрагмент кода добавляется в файл gtm.js:

// Copyright 2012 Google Inc. All rights reserved. 
// Container Version: QUICK_PREVIEW 
(function(w,g){w[g]=w[g]||{};w[g].e=function(s){return eval(s);};})(window,'google_tag_manager');(function(){ 

var __c;__c=function(a){return a["39"]};__c.a="c";__c.b=["google"];__c.isVendorTemplate=!0; 

(Обратите внимание на использование Eval в первая строка после комментария).

Так что я подозреваю, что удаление небезопасного-eval может работать, если вы можете обойтись без пользовательских переменных javascript.

+0

Я обновил сообщение, включив фрагмент кода, который мы используем для менеджера тегов. Не уверен, можем ли мы пойти с вашим предложением. – Hasantha

+0

Чтобы избежать путаницы - я не предлагаю добавить код, я указывал, что Google * автоматически * добавляет eval-вызовы в файл gtm.js, если вы используете пользовательские переменные javascript. Таким образом, предложение скорее попытается, если ваш csp будет работать в контейнере без пользовательских переменных javascript, и если да, то посмотрите, сможете ли вы как-то без них. –

+0

Я обновил вопрос, включив код javascript, который я использовал, и находится в файле _layout. – Hasantha