图片上传安全性-使用GD重新处理

Fil*_*kor 3 php security gd zend-framework

我听说,处理上载图像的最佳方法是使用GD 库“重新处理”它们并保存处理后的图像。请参阅:PHP图像上传安全性检查列表

我的问题是如何在此“重新处理” GD?这到底是什么意思?我不太了解GD库,恐怕会把它弄乱了...

因此,如果以前曾做过此事的人能给我一个例子吗?

(我知道,另一种选择是使用ImageMagick。对于ImageMagick,我在这里找到了答案:使用PHP从JPG删除EXIF数据,但现在不能使用ImgMagick。在这种情况下?)
(如果有兴趣,我正在使用Zend Framework。)

dre*_*010 5

如果用户上传JPEG文件,则可以执行以下操作来对其进行重新处理:

$newIm = @imagecreatefromjpeg($_FILES['file']['tmp_name']);
if (!$newIm) {
    // gd could not create an image from the source
    // most likely, the file was not a valid jpeg image
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以$newIm使用imagedestroy()丢弃图像并使用用户上传的文件,或者将图像从GD中保存下来并使用。保存GD映像不是原始映像,可能会出现一些问题。

另一种简单的方法是检查映像文件的头(前几个字节)以确保它是正确的。例如,所有JPEG文件均以开头0xff 0xd8

另请参见imagecreatefromstring(),您还可以使用getimagesize()对上载的图像进行类似的检查。