允许用户呈现自己的SVG文件的安全性影响


Security implications of letting users render own SVG files

我计划让网站用户上传他们自己的SVG文档,并用inkscapesvg2pdf呈现它们。用户要么未经身份验证,要么经历一个琐碎的注册过程,所以我预计会有一些黑客尝试。我可以做什么过滤来最大限度地减少安全威胁?

  • Inkscape似乎不受JavaScript加载标签的困扰,并且很高兴地在没有任何意外发生的情况下呈现内容(也就是说,我也无法使用这种方法让Firefox 10发出警报框)
  • 我担心<image xlink:href />标签可能会使用外部URI链接到一个巨大或格式错误的位图图像,理论上这可能会导致服务崩溃。有没有一种简单的方法可以遍历XML文档来过滤这些内容?当然,使用XMLReader我可以很容易地做到这一点,但我想知道是否必须处理像&#111;nload这样的"onload"(尽管Firefox只是以无效为由拒绝了它,所以这可能是一个不必要的担忧)。Sidenode:图像本身是可以接受的,但我认为我要么要求它们是内联data:,要么要求它们为白名单可接受的目标URI,并有文件大小限制
  • 是否有任何SVG指令(尤其是渲染文本的指令)可以包括系统文件(如/etc/passwd等)的文本内容
  • 我还可以采取的一种方法是根据SVG规范进行验证。这是我在这里问的另一个问题的主题

我将PHP 5.2与XMLReader和XMLWriter一起使用,不过其他基于PHP流的系统也是可以接受的。系统是OS X 10.6.8用于开发,LAMP用于生产。

是否有任何SVG指令(尤其是呈现文本的指令)可以包括系统文件的文本内容,如/etc/passwd等?

您需要确保XXE攻击不可能用于您的特定实现,请参阅此处。