1

出於安全原因,我們需要從應用程序的內容安全策略標題中刪除unsafe-eval。但取出後,我們得到(),我們增加了一個控制檯錯誤說從CSP標頭中刪除不安全評估後,Google跟蹤代碼管理器控制檯出錯

調用EVAL或阻止CSP

相關功能「https://www.googletagmanager.com」域到script-src爲好,但仍提示錯誤。

有沒有一種方法只允許unsafe-eval谷歌標籤管理器域?或者會有其他的選擇嗎?

樣品分析代碼段是低於我們在腳本中使用

(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評論後的第一行)。

所以我懷疑如果你沒有自定義的javascript變量,刪除unsafe-eval 可能會工作

+0

我已更新了該帖子,其中包括我們用於標籤管理器的代碼片段。不確定我們是否可以跟你的建議。 – Hasantha

+0

爲了避免混淆 - 我不建議您添加任何代碼,我指出如果您使用自定義JavaScript變量,Google *會自動*將eval調用添加到gtm.js文件。所以如果你的csp工作在沒有自定義javascript變量的容器中,並且如果是這樣的話,看看你是否可以在沒有它們的情況下做某事,那麼建議可以嘗試。 –

+0

我已經更新了問題,包括我使用的JavaScript代碼,它在_layout文件中。 – Hasantha

相關問題