我们正在考虑允许用户在我们的网络应用程序中上传 SVG。由于我们知道不受信任的 SVG 中存在大量复杂的漏洞,因此我们之前一直犹豫是否要这样做。一位同事发现了 Inkscape 的 --vacuum-defs 选项,并认为它可以使所有不受信任的 SVGS 可以安全地进行处理。
根据联机帮助页,该选项“从 SVG 文件部分中删除所有未使用的项目。如果与 --export-plain-svg 一起调用此选项,则只有导出的文件会受到影响。如果是单独使用时,指定的文件将被就地修改。”然而,根据我的同事的说法,“脚本被删除,XML 转换被删除,不容忍畸形,编码被删除,外部导入被删除。
这是真的吗?如果是这样,那么我们应该放心地接受不受信任的 SVG 就足够了吗?我们还应该做其他预处理吗?
最佳答案
据我了解,提供不受信任的 SVG 的主要问题是 SVG 文件可以包含 Javascript。这对于 SVG 来说是显而易见的,因为嵌入的 javascript 是格式的一部分,但如果浏览器不小心,每种类型的上传文件都可能发生这种情况。
因此,即使现代浏览器不执行 标签中找到的脚本,以防万一我认为最好从不同的域提供图像而不附加任何 cookie/auth,以便任何执行脚本不会损害用户的数据。这是我首先关心的问题。
当然,如果用户下载 SVG,然后从桌面打开它,并且碰巧使用浏览器打开它,则可能会执行潜在的恶意加载。回到最初的问题,--export-plain-svg 确实删除了脚本,但由于我不知道其他 SVG 特定的漏洞,所以我没有检查它们。
关于security - Inkscape 的 --vacuum-defs 是否使 SVG 真正安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13054510/