繁体   English   中英

HTTP Content-Security-Policy 是按页面还是按 GET 设置的?

[英]Is HTTP Content-Security-Policy set per page or per GET?

我的问题类似于,但不一样:

内容安全策略 (CSP) Header:在每个文件上还是仅在实际的 HTML 页面上?

但我认为那里没有明确的答案。

当加载 web 页面时,该页面(以及该页面加载的任何资源)的内容安全策略 (CSP) 是由遇到的第一个 CSP header 定义的,还是可以通过该页面加载的后续资源进行修改?

例子

假设位于https://www.example.com/main.html的网页返回 CSP header

Content-Secure-Policy: script-src https://safe.javascript.com

然后在其 HTML 中从 safe.javascript.Z4D236D9A2D102C5FE6AD1C50DA4BEC50 请求 Javascript 文件

<script src='https://safe.javascript.com/magnifier.js</script>

浏览器基于 CSP header 允许此源,并在页面加载期间向 safe.javascript.com 发出针对放大镜的 HTTP/GET 请求。 但是,我们假设 Javascript 文件的 HTTP 响应标头本身包含一个 CSP header:

Content-Secure-Policy: script-src https://unsafe.javascript.com

关于脚本源,main.html web 页面的 CSP 现在设置为什么?

  • Is it still https://safe.javascript.com (because the CSP applies to main.html throughout its life, and is set completely by the initial GET response)?
  • 现在是否修改为包括https://unsafe.javascript.com
  • 是否被https://unsafe.javascript.com取代?
  • magnifier.js 的 CSP header 是否确定 magnifier.js 可以加载哪些内容并且与 main.html 无关? (即每个 HTTP/GET 都有自己的 CSP 范围)
  • CSP header 是否完全被忽略(因为 CSP 设置在页面级别,而不是文件级别)?

我认为后者是安全的选择,但我在https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP中找不到答案

配置内容安全策略涉及将 Content-Security-Policy HTTP header 添加到 web页面并为其赋予值以控制允许用户代理加载哪些资源。

'for that page'是否意味着每页设置一次,并且仅由该特定页面的标题设置?

我看到网站为所有资源(例如图像、CSS)设置 CSP 标头,而不仅仅是为它们的 HTML 内容。 但除非内容是 HTML,否则有什么目的吗?

CSP 由页面定义,大多数子资源不需要指定 CSP,因为它不会被使用,发送它是浪费字节。

原始 CSP 可以指定strict-dynamic让允许的脚本添加新脚本。 但这仍然不能取代顶级 CSP。 有关更多信息,请参见此处: https://content-security-policy.com/strict-dynamic/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM