我知道我可能会为我的网站主页设置CSP标题,比如https://example.com,以限制从何处加载脚本和其他资源。但是,如果主页上没有CSP,浏览器将如何处理后续请求中的策略
这是一个两个例子:
- 我浏览到
https://example.com并返回一些HTML(无CSP标题) - HTML包含来自
https://example.com/script.js[*] - 此脚本通过发出GET to
https://api.example.com[*] - 然后,同一脚本将打开一个指向同一域的websocket,
https://api.example.com - 然后,同一脚本发出另一个请求,从外部发布到
https://api.analytics.com
[*]在步骤2和3中,如果script.js或JSON响应返回限制性CSP,如内容安全策略:默认src'none',会发生什么?是否会更改任何下游请求?浏览器是否会阻止脚本的任何请求?或者是因为原始页面加载未包含任何CSP而允许的
谢谢
当前的CSP规范(第2版)规定(重点):
3.6。政策适用性
策略与受保护的资源相关联,并针对该资源实施或监视如果资源未创建新的执行上下文(例如,在文档中包含脚本、图像或样式表时),则随该资源交付的任何策略都将被丢弃,而不会产生任何效果。其执行受包括上下文在内的一项或多项政策的约束
CSP仅适用于创建新执行上下文(即网页)的资源,该上下文仅包括顶级文档、嵌入对象,如<;iframe>和作为Web工作程序加载的脚本。如果一个资源是通过HTTP提供的,并且该资源没有以创建新的执行上下文的方式使用,那么CSP没有任何效果
因此,无论脚本是否使用内容安全策略头,脚本的行为都是相同的