Javascript 有没有办法让用户上传的SVG图像不受代码注入等的影响?

Javascript 有没有办法让用户上传的SVG图像不受代码注入等的影响?,javascript,security,svg,code-injection,Javascript,Security,Svg,Code Injection,我想在网站上显示用户上传的SVG图像,但它们很容易被利用: 例如。也有一些性能开发的问题,但我会考虑那些较低的优先级。 是否有任何机制可以使SVG稍微安全一些,并且只将其用作图像?我可以简单地信任 Wikipedia/Wikimedia Commons承载SVG文件。有人知道他们采取了什么措施来防止SVG被利用吗?如果您将SVG作为嵌入,它应该无法执行脚本。 请看这里: 当然,您也可以在处理之前解析文档,并应用与html文件相同的过滤器和正则表达式 Wikipedia/Wikimedia

我想在网站上显示用户上传的SVG图像,但它们很容易被利用:

例如。也有一些性能开发的问题,但我会考虑那些较低的优先级。

是否有任何机制可以使SVG稍微安全一些,并且只将其用作图像?我可以简单地信任


Wikipedia/Wikimedia Commons承载SVG文件。有人知道他们采取了什么措施来防止SVG被利用吗?

如果您将SVG作为
嵌入,它应该无法执行脚本。 请看这里:

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

Wikipedia/Wikimedia Commons承载SVG文件。有人知道他们采取了什么措施来防止SVG攻击吗

它们从一个单独的主机名提供上传的文件,特别是
upload.wikimedia.org
。你可以随心所欲地跨网站输入脚本,但这并不能给你带来任何好处:它与
en.wikipedia.org
的来源不同,不能触摸它的cookie或与脚本交互

这最终是处理文件上传的唯一密封方式,也是大多数大型玩家所做的。当您允许使用任意文件时,要彻底扫描存在的许多模糊的XSS可能性实在太难了

我可以简单地信任


用户可以直接导航到SVG地址,并在站点的源代码中执行脚本完整页面。

应该托管在完全不同的域上,而不是子域,la googleusercontent.com单独的主机名当然是最好的,但子域仍然有价值。(
upload.wikimedia.org
与其他wikimedia站点FWIW共享一个域,而不是Wikipedia。)针对子域的攻击是将cookie注入同一域上的其他站点。这并不理想,但也没有能够编写脚本到主域源或读取其会话cookie那么糟糕。如果您确实将子域用于用户内容,则必须将主站点放在另一个子域上,例如
www.
,并且在父级无www地址上没有任何内容,因为IE会将cookie从父级泄漏到子域。