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