应采取哪些步骤来验证应用程序中用户上传的图像?

信息安全 应用安全 攻击预防 php 上传文件
2021-08-13 11:25:57

最近,我处理了许多需要处理用户上传的图像的应用程序,已经采取了一些步骤来验证扩展名和 mime 类型。

但是还能做些什么来确保图像是有效的呢?

在我的例子中,上传由 PHP 处理,然后传递给GDImageMagick,它们都存在可能导致拒绝服务和可能执行任意代码的漏洞。

我会对人们可以提供的任何建议感兴趣,以改进专门针对 PHP 以及任何 Web 或非 Web 应用程序的验证过程。


来自我关于 Area51 提案的示例问题

3个回答

即使听起来很简单,图像检查也可能很棘手。至少应采取以下措施:

  • 检查图像的大小 - 自身的宽度、高度和大小;
  • 检查图像的扩展名和名称;
  • 检查内容类型;
  • 限制上传图片的数量;
  • 限制对上传图片的访问——如果用户不知道图片的存储位置更好;
  • 限制图像扩展的类型;
  • 最好更改图像名称;

另外,我建议在检查后明确更改图像类型,例如从 PNG 更改为 JPG。简单,但效果很好。

我不同意迄今为止提出的答案。

您肯定需要使用图像处理库(例如您建议的那些)重写图像(可能通过强制用户调整大小)。

由于 GIFAR、XSS 和文件包含等漏洞,删除 EXIF 数据等需要格外小心——这些漏洞可能会导致攻击链。

您可以对其进行大小限制,使其不超过 2 MB 或其他内容。这将有助于存储空间并防止用户上传高分辨率图像。