【发布时间】:2020-09-07 20:27:17
【问题描述】:
我们在我们网站的关键区域使用内容安全策略,使用“nonce”方法,将随机 nonce 添加到脚本标签中,此 nonce 在我们的 CSP 策略中列入白名单。
例如:
"script-src data: 'unsafe-inline' 'unsafe-eval' 'nonce-42d55d4787a9898dc31a5a8fe9030ab6' 'strict-dynamic' https: ; upgrade-insecure-requests; block-all-mixed-content; report-uri https://xxx.report-uri.com/r/d/csp/enforce;",
然后我们在 FB SDK 中加载如下:
<script async defer src="https://connect.facebook.net/en_GB/sdk.js" nonce='42d55d4787a9898dc31a5a8fe9030ab6'></script>
这在 99% 的情况下都可以正常工作,但我们的报告 URI 统计数据显示我们在 Chrome 上随机拒绝了上述脚本
{
"csp-report": {
"document-uri": "https://xxx",
"referrer": "xxx",
"effective-directive": "script-src-elem",
"original-policy": "script-src data: 'unsafe-inline' 'unsafe-eval' 'nonce-[removed]' 'strict-dynamic' https: ; upgrade-insecure-requests; block-all-mixed-content; report-uri https://xxx.report-uri.com/r/d/csp/enforce;",
"blocked-uri": "https://connect.facebook.net/en_GB/sdk.js"
}
}
总是同样的问题,'script-src-elem' 失败(应该回退到 'script-src' 并且将随机数正确列入白名单)
我很困惑为什么这在大多数情况下都有效,但在其他情况下却失败了。我可以刷新页面并偶尔重现这一点,然后再次刷新就可以了。
我能想到的要么是 Chrome 的错误,要么是 FB SDK 做的奇怪的事情......?
有什么想法吗?
【问题讨论】:
标签: google-chrome facebook-javascript-sdk content-security-policy