在内容安全策略中,更具体的值是否完全取代了一般值?

In Content Security Policy do more specific values completely replace general ones?

我看过几个 CSP 参考资料,包括 developer.mozilla.org 上的一个非常好的参考资料,但找不到答案:假设我想允许来自 self 和 *.[=19 的所有内容=],但仅来自 *.googleapis.com 的脚本。我必须在 script-src 中重复 self 和 *.facebook.com 吗?

换句话说,这就够了吗?

Content-Security-Policy default-src 'self' *.facebook.com; script-src *.googleapis.com;

或者我需要指定:

Content-Security-Policy default-src 'self' *.facebook.com; script-src 'self' *.facebook.com *.googleapis.com;

您的第二个变体是正确的:

Content-Security-Policy
   default-src 'self' *.facebook.com;
   script-src 'self' *.facebook.com *.googleapis.com;

当您在策略中指定 script-src 指令时,浏览器根本不会将 default-src 中的任何来源用于脚本(不会回退到 default-src)。将仅使用来自 script-src 的来源。

因此,如果您的应用从 'self'*.facebook.com 加载脚本,您必须在 script-src 中独立于 default-src 内容指定它们。