在响应 non-HTML 请求时设置内容安全策略是什么意思?
What does it mean to set a Content Security Policy on response to a non-HTML request?
我知道我可能会为我网站的主页设置一个 CSP header,比如 https://example.com
,以限制我可以加载脚本和其他资源的位置。但是,如果主页上没有 CSP,浏览器将如何处理后续请求的策略?
这是两个合二为一的例子:
- 我浏览到
https://example.com
并取回一些 HTML(无 CSP header)
- HTML 包含来自
https://example.com/script.js
[*] 的脚本
- 此脚本通过向
https://api.example.com
[*] 发出 GET 从 API 请求一些数据
- 同一个脚本然后打开一个到同一个域的 websocket,
https://api.example.com
- 然后相同的脚本发出另一个请求,从外部发布到
https://api.analytics.com
[*] 在第 2 步和第 3 步中,如果 script.js 或 JSON 响应返回限制性 CSP,如 Content-Security-Policy: default-src 'none'
,会发生什么情况?是否会更改任何下游请求?浏览器是否采取任何措施来阻止脚本的任何请求?还是因为原始页面加载不包含任何 CSP 而被允许?
谢谢!
current CSP spec(版本 2)说(强调我的):
3.6. Policy applicability
Policies are associated with an protected resource, and enforced or monitored for that resource. If a resource does not create a new execution context (for example, when including a script, image, or stylesheet into a document), then any policies delivered with that resource are discarded without effect. Its execution is subject to the policy or policies of the including context.
CSP 仅适用于创建新执行上下文(即网页)的资源,其中仅包括 top-level 文档、嵌入式 objects 等 <iframe>
s 和脚本作为网络工作者加载。如果通过 HTTP 提供资源并且未以创建新执行上下文的方式使用该资源,则 CSP 无效。
因此,无论是否使用 Content-Security-Policy
header.
,您的脚本的行为都是相同的
我知道我可能会为我网站的主页设置一个 CSP header,比如 https://example.com
,以限制我可以加载脚本和其他资源的位置。但是,如果主页上没有 CSP,浏览器将如何处理后续请求的策略?
这是两个合二为一的例子:
- 我浏览到
https://example.com
并取回一些 HTML(无 CSP header) - HTML 包含来自
https://example.com/script.js
[*] 的脚本
- 此脚本通过向
https://api.example.com
[*] 发出 GET 从 API 请求一些数据
- 同一个脚本然后打开一个到同一个域的 websocket,
https://api.example.com
- 然后相同的脚本发出另一个请求,从外部发布到
https://api.analytics.com
[*] 在第 2 步和第 3 步中,如果 script.js 或 JSON 响应返回限制性 CSP,如 Content-Security-Policy: default-src 'none'
,会发生什么情况?是否会更改任何下游请求?浏览器是否采取任何措施来阻止脚本的任何请求?还是因为原始页面加载不包含任何 CSP 而被允许?
谢谢!
current CSP spec(版本 2)说(强调我的):
3.6. Policy applicability
Policies are associated with an protected resource, and enforced or monitored for that resource. If a resource does not create a new execution context (for example, when including a script, image, or stylesheet into a document), then any policies delivered with that resource are discarded without effect. Its execution is subject to the policy or policies of the including context.
CSP 仅适用于创建新执行上下文(即网页)的资源,其中仅包括 top-level 文档、嵌入式 objects 等 <iframe>
s 和脚本作为网络工作者加载。如果通过 HTTP 提供资源并且未以创建新执行上下文的方式使用该资源,则 CSP 无效。
因此,无论是否使用 Content-Security-Policy
header.