允许内容安全策略中的SVG使用“不安全评估”

时间:2019-02-24 12:16:42

标签: svg http-headers content-security-policy inkscape

SVG是网络的重要组成部分。是否有办法在Inkscape中创建的SVG与内容安全策略标头的安全设置一起使用?

我的SVG中有多个“ http:// ...”链接,这些链接显然是必需的,并且将其更改为“ https”后,SVG将无法正确显示。

这些是我的SVG中的一些链接:

xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
rdf:resource="http://purl.org/dc/dcmitype/StillImage"

我曾考虑过用我自己服务的链接替换这些链接,并返回原始链接资源的副本,但是我认为这不是这些链接的目的。是吗?

是否可以修改此类SVG以完全删除链接?

2 个答案:

答案 0 :(得分:2)

您列出的“链接”仅是该词非常特殊的链接。它们是namespace声明,用于标识特定元素或属性属于哪个XML方言。

是的,这些链接中的地址存在。 但是它们永远不会被调用。只有“验证XML解释器”会这样做,浏览器不在其中。浏览器仅将这些“链接”作为唯一的字符串。如果他们知道字符串,则将根据其表示的方言呈现内容。否则,元素/属性将输入到DOM中,但在实际呈现中将被忽略-就像浏览器不知道的自定义元素一样。

Inkscape提供的SVG文件中有两个名称空间,浏览器可以理解:

  • xmlns="http://www.w3.org/2000/svg"
  • xmlns:xlink="http://www.w3.org/1999/xlink"

他们告诉浏览器一个独立文件是SVG。它们必须包含在内(是的,对于xlink来说有点简化),但对CSP毫无影响。

答案 1 :(得分:0)

我发现我的问题实际上是性质不同的,我问错了问题。我的问题与SVG中的style="fill:..."有关,导致浏览器中的SVG完全呈现黑色。显然,这是known bug in Firefox,并且通过为SVG资源设置单独的CSP标头,看似不错的workaround (that also addresses additional security threats)