当 Content-Security-Policy 同时出现在 HTTP header 和元标记中时出现问题
Issue when Content-Security-Policy is present in both HTTP header and a meta tag
我们正在开发一个 Web 项目,其中通过 HTTP headers 和元标记强制执行内容安全策略。有一组默认属性是 HTTP header 的一部分,每个页面通过文档 header 中的元标记指定附加策略。
项目中的一个页面在 iframe 中加载内容。该页面的 HTTP header 中的 Content-Security-Policy 是
Content-Security-Policy: frame-src *;
并且该页面的文档中包含以下元标记 header
<meta http-equiv="Content-Security-Policy" content="default-src none;"/>
MDN Web Docs中提到回退顺序为frame-src
-> child-src
-> default-src
。 In-spite 在 HTTP header 中设置 frame-src
,我在浏览器控制台中收到以下错误消息(在 Google Chrome 和 Microsoft Edge 上试过):
Refused to frame '<url here>' because it violates the following Content Security Policy directive: "default-src none". Note that 'frame-src' was not explicitly set, so 'default-src' is used as a fallback.
此外,
Moving both the policies either to the HTTP header or to the
meta tag works as expected
Content Security Policy 上 frame-src 上面的更一般的页面解释了您所看到的内容:
Multiple content security policies
CSP allows multiple policies being specified for a resource, including via the Content-Security-Policy
header, the Content-Security-Policy-Report-Only
header and a <meta>
element.
You can use the Content-Security-Policy
header more than once... Adding additional policies can only further restrict the capabilities of the protected resource.
所以对于多个 CSP,就好像 他们都在玩 而 不是 ,正如你所希望的那样,他们是合并为一项综合政策。因此,在您的示例中,您有效地将 frame-src
设置为 none
(因为您有 default-src
并且没有针对 frame-src
的特定覆盖),因此稍后打开它不起作用。
我们正在开发一个 Web 项目,其中通过 HTTP headers 和元标记强制执行内容安全策略。有一组默认属性是 HTTP header 的一部分,每个页面通过文档 header 中的元标记指定附加策略。
项目中的一个页面在 iframe 中加载内容。该页面的 HTTP header 中的 Content-Security-Policy 是
Content-Security-Policy: frame-src *;
并且该页面的文档中包含以下元标记 header
<meta http-equiv="Content-Security-Policy" content="default-src none;"/>
MDN Web Docs中提到回退顺序为frame-src
-> child-src
-> default-src
。 In-spite 在 HTTP header 中设置 frame-src
,我在浏览器控制台中收到以下错误消息(在 Google Chrome 和 Microsoft Edge 上试过):
Refused to frame '<url here>' because it violates the following Content Security Policy directive: "default-src none". Note that 'frame-src' was not explicitly set, so 'default-src' is used as a fallback.
此外,
Moving both the policies either to the HTTP header or to the meta tag works as expected
Content Security Policy 上 frame-src 上面的更一般的页面解释了您所看到的内容:
Multiple content security policies
CSP allows multiple policies being specified for a resource, including via the
Content-Security-Policy
header, theContent-Security-Policy-Report-Only
header and a<meta>
element.You can use the
Content-Security-Policy
header more than once... Adding additional policies can only further restrict the capabilities of the protected resource.
所以对于多个 CSP,就好像 他们都在玩 而 不是 ,正如你所希望的那样,他们是合并为一项综合政策。因此,在您的示例中,您有效地将 frame-src
设置为 none
(因为您有 default-src
并且没有针对 frame-src
的特定覆盖),因此稍后打开它不起作用。