Google Analytics内容安全政策

时间:2016-12-30 11:32:58

标签: javascript google-analytics http-headers content-security-policy

我有内容安全政策:

default-src 'none';
style-src 'self';
script-src 'self' https://www.google-analytics.com;
img-src 'self' https://www.google-analytics.com;
connect-src 'self';

在我的页面上,我将内联GA代码放入异步脚本中:

<script src="/javascript/ga.js" async></script>

这会导致CSP错误:

  

拒绝加载脚本 '数据:应用/ JavaScript的; BASE64,KGZ1bmN0aW9uKCkgewoJLy8gaHR0cHM6Ly9kZXZl ... 07Cgl9OwoJZ2EucmVtb3ZlID0gbm9vcGZuOwoJd2luZG93W2dhTmFtZV0gPSBnYTsKfSkoKTs =' 因为它违反了以下内容安全策略指示: “脚本-src的 '自我'https://www.google-analytics.com

有没有办法从JS文件提供这个脚本,如果没有,我怎么需要更改CSP?

2 个答案:

答案 0 :(得分:11)

Google Analytics与CSP兼容。 base64编码的data: blob OP正在通过uBlock Origin扩展注入。要验证,请将其停用/尝试隐身。 IIRC,这是由于扩展中的“实验/未爆发”设置。

请抵制在data:中将script-src列入白名单的诱惑。这会使策略对XSS缓解完全无用,因为攻击者只能注入<script src="data:text/javascript,alert(1)"></script>来执行Javascript。

答案 1 :(得分:6)

请参阅Michele Spagnuolo's answer和upvote。

这是由uBlock Origin引起的,因为data网址未列入白名单:

script-src data:;

这样做没有意义,因为如果不受信任的数据在您的应用程序中的任何位置用作URL,或者攻击者可以注入使用此类URL的标记,则可能会使您的应用程序容易受到攻击。这当然取决于注入点和允许的字符。

当然,您应该将任何用户输入的网址列入白名单(例如,确保它们以http://https://开头),但是因为CSP是深度防御措施,您可能不希望太过分了。

结果是你通过这样做削弱了你的CSP,以防止触发CSP报告或错误。