我有一个包含图片的svg:
例如
<svg>
<circle cx="38" cy="30" r="3"/>
<image nonce="abcd" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." />
</svg>
我已设置CSP,以便将img-src
限制为'self' 'nonce-abcd'
。
如果我通过加载该svg,则Chrome将按预期方式将其加载。但是,Firefox拒绝呈现。如果我直接从服务器在Chrome中加载SVG,它也将无法加载。
我了解这是因为Chrome不会将CSP应用于内嵌的SVG,而Firefox则会应用CSP。这也是为什么无法从Chrome的服务器路径中加载的原因(因为它应用了CSP)。
我不明白的是,当应用CSP时,错误为Refused to load the image 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...' because it violates the following Content Security Policy directive: "img-src 'self' 'nonce-abcd'".
如果我将CSP设置为包含data:
,则在所有情况下都将加载图像。但我想避免这种情况,因为据我了解,它可能会留下攻击媒介。
还有其他选项可以加载图像吗?