从CSP标头中删除unsafe-eval后出现Google跟踪代码管理器控制台错误

时间:2016-12-27 06:40:06

标签: security web-applications google-tag-manager content-security-policy

出于安全原因,我们需要从应用程序的内容安全策略标头中删除unsafe-eval。但删除后,我们收到控制台错误

  

调用eval()或CSP阻止的相关功能

我们添加了" https://www.googletagmanager.com"域名也是script-src,但它仍会提示错误。

是否有办法仅允许{tag}域名为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');

1 个答案:

答案 0 :(得分:3)

根据this Lunametrics article GTM使用eval自定义javascript变量:

  

[...]因此,您的脚本可能会执行得更慢一些   现在将成为自定义JavaScript变量的附加eval()   您将参数传递给

事实上,当我将一个自定义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 可能会工作。