最近,我处理了许多需要处理用户上传的图像的应用程序,已经采取了一些步骤来验证扩展名和 mime 类型。
但是还能做些什么来确保图像是有效的呢?
在我的例子中,上传由 PHP 处理,然后传递给GD或ImageMagick,它们都存在可能导致拒绝服务和可能执行任意代码的漏洞。
我会对人们可以提供的任何建议感兴趣,以改进专门针对 PHP 以及任何 Web 或非 Web 应用程序的验证过程。
最近,我处理了许多需要处理用户上传的图像的应用程序,已经采取了一些步骤来验证扩展名和 mime 类型。
但是还能做些什么来确保图像是有效的呢?
在我的例子中,上传由 PHP 处理,然后传递给GD或ImageMagick,它们都存在可能导致拒绝服务和可能执行任意代码的漏洞。
我会对人们可以提供的任何建议感兴趣,以改进专门针对 PHP 以及任何 Web 或非 Web 应用程序的验证过程。
即使听起来很简单,图像检查也可能很棘手。至少应采取以下措施:
另外,我建议在检查后明确更改图像类型,例如从 PNG 更改为 JPG。简单,但效果很好。
我不同意迄今为止提出的答案。
您肯定需要使用图像处理库(例如您建议的那些)重写图像(可能通过强制用户调整大小)。
由于 GIFAR、XSS 和文件包含等漏洞,删除 EXIF 数据等需要格外小心——这些漏洞可能会导致攻击链。
您可以对其进行大小限制,使其不超过 2 MB 或其他内容。这将有助于存储空间并防止用户上传高分辨率图像。