Google 分析内容安全政策

Google Analytics 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 错误:

Refused to load the script 'data:application/javascript;base64,KGZ1bmN0aW9uKCkgewoJLy8gaHR0cHM6Ly9kZXZl…07Cgl9OwoJZ2EucmVtb3ZlID0gbm9vcGZuOwoJd2luZG93W2dhTmFtZV0gPSBnYTsKfSkoKTs=' because it violates the following Content Security Policy directive: "script-src 'self' https://www.google-analytics.com".

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

请参阅并点赞。

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

script-src data:;

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

当然,您应该将任何用户输入的 URL 列入白名单(例如,确保它们以 http://https:// 开头),但是由于 CSP 是纵深防御措施,您可能不需要太想削弱了

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

Google Analytics 与 CSP 兼容。 OP 看到的 base64 编码 data: blob 正在被 uBlock Origin 扩展注入。要验证,请禁用 it/try 隐身模式。 IIRC,这是由于扩展中的 "experimental/unbreak" 设置。

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