我有内容安全政策:
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?
答案 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报告或错误。