使用 PHP 安全上传图片

Posted

技术标签:

【中文标题】使用 PHP 安全上传图片【英文标题】:Safe image uploading with PHP 【发布时间】:2010-06-06 13:00:13 【问题描述】:

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

【问题讨论】:

【参考方案1】:

它甚至不必是 BMP:您可以使用 php 的 GD 函数,使用 imagecreatefrom[xyz] 打开图像,将其复制为未调整大小,然后以原始格式写回。

这应该是无懈可击的,当然,有朝一日在 GD 本身中发现漏洞的可能性很小(并且可以忽略不计)。

我能想到的限制和注意事项:

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

李>

动画 GIF 会这样销毁,GD 无法处理

此方法会受到 PHP 的内存限制(您至少需要 image width x 图像高度 x 3 字节用于调整大小操作)

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

【讨论】:

好电话!这些是我可以忍受的警告。谢谢!

以上是关于使用 PHP 安全上传图片的主要内容,如果未能解决你的问题,请参考以下文章

文件上传图片

php图片上传

php 怎么上传完图片之后,给这个图片打水印,并且保存在另一个文件夹

完整的安全图像上传脚本

怎样用php实现上传图片到数据库

php中上传多张图片,如何解决?