清理图像内容并删除嵌入的 Javascript

Ark*_*tos 2 javascript java security xss

对于我们\xe2\x80\x99正在构建的图像上传API,是否有关于检查/清理恶意内容的指导?

\n

我\xe2\x80\x99在互联网上看到过一些例子,我们可以在图像中添加JavaScript并将其上传到任何文件上传API。如果我们要使用其他地方的元素按原样渲染图像,则嵌入的 JS 代码将由浏览器执行。

\n

在寻找缓解建议时,我在 OWASP 文档中发现了此链接。他们的建议是使用 Apache Commons Imaging 库重写图像,但我\xe2\x80\x99m 不确定它\xe2\x80\x99s 是否得到积极维护(最后更新于 2020 年)

\n

是否有更好的方法来检测图像中嵌入的 JS(或者)某种在浏览器中渲染这些图像的安全方法以减轻存储的 XSS 攻击?

\n

感谢对此的任何帮助。

\n

小智 7

有多种方法可以减轻图像文件上传上的 XSS 攻击。

按着这些次序,

  • 不允许使用除图像之外的任何其他文件类型。(例如:仅接受内容类型为:image/png, image/jpg, image/jpeg,的文件image/gif
  • 始终使用适当的扩展名保存文件,切勿允许用户控制文件名的扩展名。(您可以使用完全随机的名称保存文件来缓解这种情况,使用 GUID/UUID 为图像生成随机名称)
  • 将 HTTP 响应的内容类型设置为image/<type>(如果内容类型为 ,浏览器将不会执行任何 JavaScript image/*
  • 仅使用<img src="[path-to-img]">标签来渲染图像,不允许用户控制此处的任何 HTML 值。
  • 如果您允许用户上传svg图像,那么您应该清理文件的内容,因为 SVG 文件是使用 XML 构建的。因此,请使用sanitize-svg之类的工具从上传的数据中删除恶意内容。
  • 使用CSP防止XSS (可选,如果能实现就更好了)

如果您遵循上述步骤,那么获得 XSS 的机会几乎为零。(当前 - 2022-04-09)
因此,如果您只想防范 XSS 攻击,则无需清理或检测上传数据的恶意内容。

[警告]:如果您在服务器端处理上传的数据进行其他操作(调整大小、裁剪),则必须在执行此操作之前删除所有恶意内容。

最后,请务必查看OWASP 提供的XSS 缓解备忘单

希望这可以帮助。