如何从 SVG 文件中删除所有 javascript?
How do you remove all javascript from an SVG file?
我们计划允许用户上传 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文件一网打尽呢?
https://digi.ninja/blog/svg_xss.php 详细说明了这一点。
它指出:
直接查看 - 易受攻击 - 文件直接链接。
使用 content-disposition 直接查看:附件 - 不易受攻击 - Headers 已发送以强制下载文件。
使用 CSP 直接查看 - 不易受攻击 - 内容安全策略设置为禁止内联 JavaScript。
图像标签 - 不易受攻击 - SVG 通过防止脚本的图像标签引用。
带有 CSP 的标签 - 不易受攻击 - 图像标签和与上述相同的 CSP 以提供双重保护。
已通过 Inkscape 清理 - 易受攻击 - 这是直接视图,但文件已通过以下命令处理:
inkscape --file="xss.svg" --verb="FileVacuum" --export-plain-svg="sanitised.svg"
(预计这会删除 JavaScript 但它没有。)
- iframe 中的图像 - 易受攻击 - SVG 作为 iframe 的源加载,没有设置特殊属性。
- 沙盒 iframe 中的图像 - 不易受攻击 - SVG 作为 iframe 的源加载,但沙盒属性设置为
块脚本。
我们计划允许用户上传 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文件一网打尽呢?
https://digi.ninja/blog/svg_xss.php 详细说明了这一点。
它指出:
直接查看 - 易受攻击 - 文件直接链接。
使用 content-disposition 直接查看:附件 - 不易受攻击 - Headers 已发送以强制下载文件。
使用 CSP 直接查看 - 不易受攻击 - 内容安全策略设置为禁止内联 JavaScript。
图像标签 - 不易受攻击 - SVG 通过防止脚本的图像标签引用。
带有 CSP 的标签 - 不易受攻击 - 图像标签和与上述相同的 CSP 以提供双重保护。
已通过 Inkscape 清理 - 易受攻击 - 这是直接视图,但文件已通过以下命令处理:
inkscape --file="xss.svg" --verb="FileVacuum" --export-plain-svg="sanitised.svg"
(预计这会删除 JavaScript 但它没有。)
- iframe 中的图像 - 易受攻击 - SVG 作为 iframe 的源加载,没有设置特殊属性。
- 沙盒 iframe 中的图像 - 不易受攻击 - SVG 作为 iframe 的源加载,但沙盒属性设置为 块脚本。