内容安全策略:来自 Inkscape 的 SVG,嵌入标签中包含 Sozi 动画



在我的网站上,我有一个动画SVG在嵌入标签中用Sozi作为标题图像。

我的 .htacess 文件 CSP 标头如下所示: 标头集 Content-Security-Policy "default-src 'self'">

显然,这还不够有效。

Chrome 为 SVG 中的所有元素提供了大约 50 种不同的哈希和,有点像这样

"拒绝应用内联样式,因为它违反了以下内容安全策略指令:"default-src 'self'"。启用内联执行需要"unsafe-inline"关键字、哈希('sha256-OXKUzBwllYUKQyK1cDvFciYCgedWl0Tn33OfzW6sO0U='(或随机数('nonce-...'(。另请注意,'style-src' 没有明确设置,所以 'default-src' 被用作后备。

有没有办法将整个 SVG 文件列入白名单,而不是其中具有内联样式的每个元素?对我来说,必须复制粘贴所有这些哈希和是没有意义的,当这可以以某种方式总结整个事情时。

我已经尝试对 SVG 进行哈希处理,并将其插入标头的 style-src 部分,但不幸的是,这不起作用。使用"不安全的内联"工作(对于 style-src(,但如果可能的话,这不是我想使用的。

转换 Inkscape 的内联样式(正如我现在无法再次找到的地方所建议的那样(是另一种选择,但也不是我要问的。

无法将整个 SVG 内容列入白名单。如果您保留内联样式并想要一个安全策略,则该策略必须指定浏览器显示的所有哈希,否则您必须使用 nonces。

否则,浏览器无法"总结整个事情"。由于在这种情况下使用 CSP 的目的是确保浏览器可以区分您自己有意添加到文档中的内联样式和您没有添加的样式(因此可能是由攻击者添加的(,因此,如果不为每个内联样式实例指定哈希或随机数,浏览器就无法确定哪些是哪些。

使用 SVG,样式属性中使用的所有内容也可以表示为属性。

这与你不太相关,因为你正在使用一个工具来生成你的SVG,但对于任何手动编辑它们的人来说。如果您在类似<rect style="fill: red" />上收到错误,您可以通过执行 CSP 在严格规则下有效并呈现相同内容<rect fill="red">来更正它。对所有样式属性执行此操作,即可让 SVG 在最严格的 CSP 规则集下工作。

最新更新