提问者:小点点

什么CSP子iframe继承了它的父?


我有一个网页(比如origin=a),其中嵌入了一个iframe,它从不同的域(比如B)加载。B从不同的域(不同的CDN)加载大量脚本。我的网页A设置了非常严格的CSP,如:

默认src'无';脚本src'自我';框架src B

B不设置任何CSP头。

现在,我希望子框架B继承A的CSP规则,并尝试访问各种CDN应该是对其CSP的违反,因为脚本src“自我”,但令我惊讶的是,它工作顺利。

所以我的问题是:CSP是如何被子iFrame继承的?如果没有提到iframe的CSP,它是否取决于其父帧的CSP?如果是,如何进行?是否有任何关于它的文件,我找不到任何具体的东西来解释上述情况。

有没有办法调试子iFrame继承的CSP?从Chrome的调试器或FF的调试器-通过选择iframe,然后显示iframe的CSP?


共1个答案

匿名用户

子iFrame如何继承CSP?

它不是——不是在常见情况下(问题中的“从不同的域加载”情况)。

但是还有其他方法来填充iframe,CSP的工作原理与之不同(见下文)。

如果没有提到iframe的CSP,它是否依赖于父帧的CSP?

不,它不适用于常见情况(问题中的“从不同域加载”情况)。

有关于它的文件吗

是的,请参阅CSP2规范的策略适用性部分,其中说:

嵌入式上下文:通过iframe对象嵌入包含的任何资源。

除非嵌入式资源是全局唯一标识符(或srcdociframe),否则嵌入式资源由随资源一起交付的策略控制。如果嵌入式资源是全局唯一标识符或srcdociframe,则它将继承创建它的上下文的策略。

“全局唯一标识符”是指具有数据:URL或其他非层次URL的URL,如https/httpURL。

因此,常见的情况(“问题中的“从不同域加载”)是“嵌入式资源由随资源交付的策略控制”的情况,也就是说,它不继承。

相反,如果iframe是一个srcdociframe,则情况非常不同,规范中说:

每当用户代理在嵌套在受保护资源中的浏览上下文中创建一个iframe srcdoc文档时,如果用户代理正在为受保护资源强制执行任何策略,用户代理必须在iframe srcdoc文档上强制执行这些策略以及。

这是一个srcdociframe确实继承了其父级的CSP策略。