我的问题与相似,但不相同
内容安全策略(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/