首页 文章

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

提问于
浏览
5

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

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

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

4 回答

  • 1

    重绘图像,用GDimagecreatefromXXX() 读取并用 imageXXX() 保存

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

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

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

    保持GD更新,并警惕(7年前,显然)it used to sport buffer overflows处理 PNG images

    或者,您也可以使用ImageMagick的转换等命令在后台预处理上传的图像 . 最后注意警告:在Windo(w)上,转换也是一个用于格式化硬盘的命令,因此如果部署硬盘,请花一些精力来消除歧义 .

  • 8

    如果您担心恶意文件使用防病毒检查程序,或者更好,其中两个可能会因为某个新病毒而落后 .

    MIME类型可以欺骗,也可以使用 file .

    您可以使用代码打开它,检查所有块是否都是正确的大小,但利用漏洞利用用于打开图像的代码中的缺陷 . 如果你的代码没有加强并且知道它可以被利用的所有方式,你可能会打开在主机/服务器上利用的大门 - 它几乎是一个鸡和蛋的情况,所以我倾向于更多地信任几个防病毒工具 .

  • -2

    我不会去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类型以进行更准确的验证 .

  • 1

    我不确定它是否完全安全,但你可以使用

    if( getimagesize($filename) )
      //probably an image
    

相关问题