Javascript 用于动态加载CSS的CSP

Javascript 用于动态加载CSS的CSP,javascript,css,content-security-policy,Javascript,Css,Content Security Policy,因此,我将从第三方加载一个JavaScript文件到我的应用程序中,该应用程序将iframe注入页面。当该iframe加载时,它会加载自己的JavaScript,从而在父窗口中创建一个内联样式标记 由于这个流程,我必须在style src指令的内容安全策略中包含不安全内联“。是否有类似于strict dynamic的东西适用于这样加载的样式?或者是否有某种解决方案,我不必在CSP中列出“不安全内联”,但仍然允许使用此样式表 我能想到的最好办法是每隔几个小时扫描一次这个重定向文件,并生成子资源完整

因此,我将从第三方加载一个JavaScript文件到我的应用程序中,该应用程序将iframe注入页面。当该iframe加载时,它会加载自己的JavaScript,从而在父窗口中创建一个内联样式标记

由于这个流程,我必须在
style src
指令的内容安全策略中包含
不安全内联“
。是否有类似于
strict dynamic
的东西适用于这样加载的样式?或者是否有某种解决方案,我不必在CSP中列出“不安全内联”,但仍然允许使用此样式表


我能想到的最好办法是每隔几个小时扫描一次这个重定向文件,并生成子资源完整性哈希,以便定期将其注入我的CSP,但这似乎非常脆弱。

通过CSS对象模型(CSSOM)设置CSS与CSP配合使用。因此:

document.getElementById(id.style.left='343px'

在这种情况下,您可能需要说服第三方供应商修改其JavaScript


来源:

页面上是否有其他内联样式或脚本?如果没有,是否有一个选项来禁用此样式标记的“注入”,并由您自己显式地包含这些样式?或者Anand Bhat末尾提到的安全措施是否足以满足您的需要?您可以生成一个
nonce
,它需要包含在CSP标题和样式标记中。@DanMacák很遗憾,没有选项禁用供应商的注入。上面提到的安全措施对于我们正在寻找的东西来说还不够。@allo我想生成一个
nonce
,但正如前面提到的,我无法控制何时注入样式,因此,当标记被添加到页面中时,我无法将nonce添加到标记中。@kddeisz在这种情况下,我看到您可以做两件事。第一个文件特性或对第三方库的拉取请求(顺便说一句,哪一个是?),以便能够排除该样式注入并指定
样式src
类似于
的“self”https://3rdparty.lib/styles/*“不安全内联”
。由于您现在绝对必须使用内联样式标记,并且不能使用哈希或nonce,所以缩小从样式标记加载的范围是我看到的唯一解决方案。它不如将不安全的内联源全部排除在外那样安全,但它仍然比完全没有样式src CPS度量要好得多。在这种情况下,它们实际上是在向DOM中注入样式表,而不是修改元素。您说过:“一个JavaScript文件。。。在页面上注入一个iframe。当该iframe加载时,它会加载自己的JavaScript,从而在父窗口中创建一个内联样式标记。也就是说,样式是从JavaScript创建的,而不是从样式表读取的。我并不是说说服第三方供应商以不同的方式做事很容易;只是从技术上来说,你可以按你的要求去做。(这就是说,如果他们同意的话,改变对他们来说应该不会太困难!)谢谢Stephen。我明白你的意思,我只是说他们没有使用JavaScript在DOM元素上设置CSS属性,他们正在加载浏览器处理的内联样式标记。对,这就是CSP阻止它的原因