我需要接受用户上传的图片文件。
我如何检查并100%确定我没有收到恶意文件?
检查mime类型?重新绘制图像?防病毒?
答案 0 :(得分:8)
重绘图片,使用GD的imagecreatefromXXX()
进行阅读并使用imageXXX()
通过这种方式,您还可以将其缩放到更方便的尺寸,并控制带宽消耗。
为了节省计算能力,请拒绝上传到大于某个限制的文件。
5megs或10megs应该没问题,因为有限制。
保持GD更新,并警惕(7年前,显然) it used to sport buffer overflows 处理 PNG图像
或者,您也可以使用ImageMagick的
convert
等命令在后台预处理上传的图像。最后发出警告: on Windo(w)s
convert
也是一个用于格式化硬盘的命令,因此需要付出一些努力来消除歧义如果你部署它。
答案 1 :(得分:1)
如果您担心恶意文件使用防病毒检查程序,或者更好,其中两个可能会因为某个特定的新病毒而落后。
可以使用file
欺骗MIME类型。
您可以使用代码打开它,检查所有块是否都是正确的大小,但利用漏洞利用用于打开图像的代码中的漏洞。如果你的代码没有加强并且知道它可以被利用的所有方式,你可能会打开在主机/服务器上利用的大门 - 它几乎是一个鸡和蛋的情况,所以我倾向于更多地信任几个防病毒工具。
答案 2 :(得分:1)
我不会进行100%图像类型验证,我使用简单的脚本来检查图像类型验证
$imgExtension = array('jpg','jpe','jpeg','gif','png');
$image_name = pathinfo($_FILES['image']['name']);
$extension = strtolower($image_name['extension']);
if(in_array($extension,$ImgExtension)){
//process file upload - move_uploaded_file()
}
>
您还可以检查mime类型以进行更准确的验证。
答案 3 :(得分:-2)
我不确定它是否完全安全,但您可以使用
if( getimagesize($filename) )
//probably an image