我希望我的网站有一个功能供用户上传图片,但我想安全地完成。也就是说,我想删除EXIF数据和可能在其图像中的任何恶意代码。我想到了一种涉及直接操作文件的方法,但它让我感到震惊,将它们提供的图像转换为BMP然后将其转换回原始格式会更有意义吗?它会遭受世代损失,但我相信这符合我项目的要求。 BMP不包含EXIF,是吗?并且重新处理应该删除任何恶意内容。
答案 0 :(得分:3)
它甚至不必是BMP:您可以使用PHP的GD功能,使用imagecreatefrom[xyz]
打开图像,将其复制为未原样,然后以原始格式将其写回。
这应该是非常不透水的,除了远程(和可忽略的)可能性,当然有一天在GD本身发现了一个漏洞。
我能想到的限制和警告:
透明度的图片可能是一个问题,尤其是透明的GIF可能需要特殊处理(在新图像中分配透明色等,不确定)
动画GIF会以这种方式被破坏,GD无法处理它们
此方法受PHP内存限制的限制(至少需要{image width} x {image height} x 3字节用于调整大小操作)
更多奇特的子格式,如渐进式JPG,CMYK JPG可能会造成麻烦,但这没关系IMO - 后者在IE中无法显示