在评估应用程序时,我发现可以提交包含 JavaScript 的 SVG 文件(该应用程序也容易受到 XXE 的攻击)。我想知道是否有一种方法可以防止这些漏洞并保护 SVG 提交表单?如何确保所有混淆方法都被捕获?
首先,我开发了一种黑名单方法,但从安全的角度来看,这是一种非常非常糟糕的方法。你有什么建议?
在评估应用程序时,我发现可以提交包含 JavaScript 的 SVG 文件(该应用程序也容易受到 XXE 的攻击)。我想知道是否有一种方法可以防止这些漏洞并保护 SVG 提交表单?如何确保所有混淆方法都被捕获?
首先,我开发了一种黑名单方法,但从安全的角度来看,这是一种非常非常糟糕的方法。你有什么建议?
看看最近由安全研究员 Robin (@digininja) 发布的关于这个确切主题的精彩博客文章:
直接查看内容处置:附件 - 不易受攻击 - 发送标题以强制下载文件。
使用 CSP 直接查看 - 不易受攻击 - 内容安全策略设置为禁止内联 JavaScript。
图像标签 - 不易受攻击 - 通过阻止脚本的图像标签引用 SVG。
带有 CSP 的标签 - 不易受到攻击 - 图像标签和与上述相同的 CSP 以提供双重保护。
虽然@ThorTL67 指出了一些完全有效的解决方案,但我对它们中的任何一个都不满意,而且它们对我来说似乎有点不负责任。
这是因为 SVG 中的任何恶意 JS 仍会发送给查看器。这意味着如果他们碰巧保存了 SVG 文件然后查看它,任何恶意 JavaScript 仍将在他们的设备上执行,因为在大多数设备上,唯一可以查看 SVG 的软件是浏览器。
对于@ThosTL67 的回答中的第一点尤其如此。
以下是一些替代建议:
您可以将 SVG 转换为服务器端的另一种格式(例如 PNG),然后显示新图像。
您可以使用诸如此类的库来清理SVG。