如何防止 SVG 文件上传中的 XSS?

信息安全 xss javascript 上传文件 图片 svg
2021-08-23 17:43:50

在评估应用程序时,我发现可以提交包含 JavaScript 的 SVG 文件(该应用程序也容易受到 XXE 的攻击)。我想知道是否有一种方法可以防止这些漏洞并保护 SVG 提交表单?如何确保所有混淆方法都被捕获?

首先,我开发了一种黑名单方法,但从安全的角度来看,这是一种非常非常糟糕的方法。你有什么建议?

2个回答

看看最近由安全研究员 Robin (@digininja) 发布的关于这个确切主题的精彩博客文章

  • 直接查看内容处置:附件 - 不易受攻击 - 发送标题以强制下载文件。

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

  • 图像标签 - 不易受攻击 - 通过阻止脚本的图像标签引用 SVG。

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

虽然@ThorTL67 指出了一些完全有效的解决方案,但我对它们中的任何一个都不满意,而且它们对我来说似乎有点不负责任。

这是因为 SVG 中的任何恶意 JS 仍会发送给查看器。这意味着如果他们碰巧保存了 SVG 文件然后查看它,任何恶意 JavaScript 仍将在他们的设备上执行,因为在大多数设备上,唯一可以查看 SVG 的软件是浏览器。

对于@ThosTL67 的回答中的第一点尤其如此。

以下是一些替代建议:

  1. 您可以将 SVG 转换为服务器端的另一种格式(例如 PNG),然后显示新图像。

  2. 您可以使用诸如此类的库来清理SVG