HTTP内容安全策略是按页面设置还是按GET设置



我的问题与相似,但不相同

内容安全策略(CSP(标题:是在每个文件上,还是只在实际的HTML页面上?

但我不认为有一个明确的答案。

加载网页时,该网页(以及该网页加载的任何资源(的内容安全策略(CSP(是由第一个CSP标头定义的,还是可以由该页加载的后续资源修改?

示例

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

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

然后在其HTML中从safe.Javascript.com:请求一个Javascript文件

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

浏览器基于CSP头允许该源,并在页面加载期间向safe.javascript.com发出HTTP/GET请求以获取amplifier.js。然而,让我们假设Javascript文件本身的HTTP响应标头包括一个CSP标头:

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

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

  • 它还在吗https://safe.javascript.com(因为CSP适用于main.html的整个生命周期,并且完全由初始获取响应(
  • 现在是否修订为包括https://unsafe.javascript.com?
  • 它被替换了吗https://unsafe.javascript.com?
  • 放大器.js的CSP头是否决定了放大器.js可以加载哪些内容,而与main.html无关?(即每个HTTP/GET都有自己的CSP作用域(
  • CSP标头是否被完全忽略(因为CSP设置在页面级别,而不是文件级别(

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

配置内容安全策略涉及将内容安全策略HTTP标头添加到网页,并为其赋予值以控制允许用户代理为该页面加载的资源

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

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

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

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

最新更新