安全性:如何验证图像文件上传?

Hap*_*per 5 php security upload image mime-types

我需要接受来自用户的图像文件上传.

我如何检查并100%确定我没有收到恶意文件?

检查哑剧类型?重新绘制图像?防病毒?

ZJR*_*ZJR 8

重绘图像,以阅读起来GDimagecreatefromXXX(),并保存它带回imageXXX()

这样,您还可以将其缩放到更方便的尺寸,并控制带宽消耗.

为了节省计算能力,请拒绝上传到大于某个限制的文件.

5megs或10megs应该是好的,因为限制.

保持GD更新,并警惕(7年前,显然)它曾用于处理PNG图像运动缓冲区溢出

或者,你也可以上传预处理背景与命令图像,如ImageMagick的convert和这样的.

警告的最后一点:在Windo(w) convert上也是一个用于格式化硬盘的命令,因此如果部署硬盘就要付出一些努力来消除歧义.

  • ImageMagick不是为这类事写的:http://lwn.net/Articles/206928/.如果您对不受信任的输入使用ImageMagick,请将其沙箱化.任何东西,VMWare,Linux-VServer,UML都可以帮助ImageMagick远离文件系统和特权处理器模式,因此如果它受到损害,唯一受到损害的是VM. (2认同)

the*_*Man 0

如果您担心恶意文件,请使用防病毒检查器,或者更好的是,使用两个防病毒检查器,因为其中一个可能会滞后于特定的新病毒。

MIME 类型可以被欺骗,就像使用file.

您可以使用代码打开它,检查所有块的大小是否正确,但漏洞利用了用于打开图像的代码中的缺陷。如果您的代码没有经过强化并且没有意识到它可能被利用的所有方式,那么您可能会在您的主机/服务器上打开利用之门 - 这几乎是先有鸡还是先有蛋的情况,因此我更倾向于信任几个防病毒工具。