有没有办法让用户上传的SVG图像免于代码注入等?

时间:2015-10-28 09:48:25

标签: javascript security svg code-injection

我想在网站上显示用户上传的SVG图片,但他们对攻击非常开放:

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

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

Wikipedia / Wikimedia Commons托管SVG文件。有谁知道他们采取了哪些措施来防止SVG攻击?

2 个答案:

答案 0 :(得分:6)

  

Wikipedia / Wikimedia Commons托管SVG文件。有谁知道他们采取了哪些措施来防止SVG攻击?

他们从单独的主机名提供上传的文件,特别是upload.wikimedia.org。您可以跨站点脚本进入所有您喜欢的内容,但它并不能为您提供任何内容:它与en.wikipedia.org生成不同的来源,无法触及其Cookie或与其脚本进行交互。

这最终是处理文件上传的唯一密不透风的方式,以及大多数大玩家所做的事情。对允许任意文件存在的所有许多模糊XSS可能性进行全面扫描是非常困难的。

  

我可以简单地信任<img src="/media/user-uploaded-image.svg" />吗?

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

答案 1 :(得分:3)

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

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