我希望我的网站有一个功能供用户上传图片,但我想安全地做到这一点。也就是说,我想去除 EXIF 数据和任何可能在他们的图像中的恶意代码。我正在考虑一种涉及直接操作文件的方法,但它让我感到震惊,将他们提供的图像转换为 BMP 然后将其转换回原始格式是否更有意义?它会遭受一代人的损失,但我相信这会满足我项目的要求。BMP 不包含 EXIF,是吗?并且重新处理应该去除任何恶意内容。
问问题
531 次
1 回答
3
它甚至不必是 BMP:您可以使用 PHP 的 GD 函数,使用 打开图像imagecreatefrom[xyz]
,将其复制为未调整大小,然后以原始格式写回。
这应该是非常无懈可击的,当然,有朝一日在 GD 本身中发现了一个漏洞的可能性很小(并且可以忽略不计)。
我能想到的限制和注意事项:
具有透明度的图像可能是一个问题,尤其是透明的 GIF 可能需要特殊处理(在新图像中分配透明颜色等,不确定)
GIF动图就这样毁了,GD没办法
此方法会受到 PHP 的内存限制(调整大小操作至少需要 {image width} x { image height } x 3 个字节)
像渐进式 JPG、CMYK JPG 等更具异国情调的子格式可能会造成麻烦,但这没关系 IMO - 后者无论如何都不会在 IE 中显示
于 2010-06-06T13:04:12.773 回答