如何从SVG文件中删除所有javascript?

时间:2017-12-11 16:58:23

标签: javascript svg xss code-injection

我们计划允许用户上传SVG文件和图标。问题是SVG文件可能包含JavaScript,因此非常容易受到注入攻击。

<svg 
xmlns="http://www.w3.org/2000/svg" 
width="780" height="550" 
onload="(function(){ alert('doing something nasty') })()">

在使用svg文件时执行此代码。

我发现了nice library to manage SVG files。这有助于删除像onEVENT ='someJs()'这样的属性;但那仍不能帮我晚上睡觉。

那么怎么能以一种聪明的方式完全扫描JS代码的SVG文件呢?

1 个答案:

答案 0 :(得分:1)

https://digi.ninja/blog/svg_xss.php 详细说明了这一点。

它指出:

  1. 直接查看 - 易受攻击 - 文件直接链接。

  2. 使用内容处置的直接查看:附件 - 不易受到攻击 - 发送标头以强制下载文件。

  3. 使用 CSP 直接查看 - 不易受到攻击 - 内容安全策略设置为禁止内嵌 JavaScript。

  4. 图像标签 - 不易受到攻击 - SVG 通过防止脚本的图像标签进行引用。

  5. 带有 CSP 的标签 - 不易受到攻击 - 图像标签和与上述相同的 CSP 以提供双重保护。

  6. 通过 Inkscape 清理 - 易受攻击 - 这是一个直接视图,但文件已通过以下命令处理:

    inkscape --file="xss.svg" --verb="FileVacuum" --export-plain-svg="sanitised.svg"
    

(原以为这会删除 JavaScript,但事实并非如此。)

  1. iframe 中的图像 - 易受攻击 - SVG 作为 iframe 的源加载,没有设置特殊属性。
  2. 沙盒 iframe 中的图像 - 不易受到攻击 - SVG 作为 iframe 的源加载,但沙盒属性设置为 阻止脚本。