有什么方法可以使用户上传的 SVG 图像免受代码注入等的影响?

Is there any way to make user uploaded SVG images safe from code injection etc?

我想在网站上显示用户上传的 SVG 图片,但它们很容易受到攻击:

例如,arbitrary javascript can be embedded in SVG。性能漏洞也存在问题,但我认为这些优先级较低。

是否有任何机制可以使 SVG 在一定程度上安全并仅将其用作图像?我可以简单地信任 <img src="/media/user-uploaded-image.svg" /> 吗?

Wikipedia/Wikimedia Commons 托管 SVG 文件。有谁知道他们采取了什么措施来防止 SVG 漏洞利用?

如果您将 SVG 作为 <image> 嵌入,它应该无法执行脚本。 看这里:https://www.w3.org/wiki/SVG_Security

当然,您也可以在处理之前解析文档,并应用与 html 文件相同的过滤器和正则表达式。

Wikipedia/Wikimedia Commons hosts SVG files. Does anyone know what measures they take to prevent SVG exploits?

他们从一个单独的主机名提供上传的文件,特别是 upload.wikimedia.org。您可以随心所欲地跨站点脚本进入那里,但它不会给您带来任何好处:它与 en.wikipedia.org 的来源不同,无法触摸其 cookie 或与其脚本交互。

这最终是处理文件上传的唯一无懈可击的方式,也是大多数大公司所做的。当您允许任意文件时,很难对所有存在的所有模糊 XSS 可能性进行彻底扫描。

Can I simply trust <img src="/media/user-uploaded-image.svg" />?

<img> 做什么并不重要——用户可以直接导航到 SVG 地址,它将在站点的源中执行脚本整页。