使用PHP上传安全图像

时间:2010-06-06 13:00:13

标签: php exif bmp

我希望我的网站有一个功能供用户上传图片,但我想安全地完成。也就是说,我想删除EXIF数据和可能在其图像中的任何恶意代码。我想到了一种涉及直接操作文件的方法,但它让我感到震惊,将它们提供的图像转换为BMP然后将其转换回原始格式会更有意义吗?它会遭受世代损失,但我相信这符合我项目的要求。 BMP不包含EXIF,是吗?并且重新处理应该删除任何恶意内容。

1 个答案:

答案 0 :(得分:3)

它甚至不必是BMP:您可以使用PHP的GD功能,使用imagecreatefrom[xyz]打开图像,将其复制为未原样,然后以原始格式将其写回。

这应该是非常不透水的,除了远程(和可忽略的)可能性,当然有一天在GD本身发现了一个漏洞。

我能想到的限制和警告:

  • 透明度的图片可能是一个问题,尤其是透明的GIF可能需要特殊处理(在新图像中分配透明色等,不确定)

  • 动画GIF会以这种方式被破坏,GD无法处理它们

  • 此方法受PHP内存限制的限制(至少需要{image width} x {image height} x 3字节用于调整大小操作)

  • 更多奇特的子格式,如渐进式JPG,CMYK JPG可能会造成麻烦,但这没关系IMO - 后者在IE中无法显示