getimagesize函数可以取得图像文件的类型

解决方案 »

  1.   

    我一直用getimagesize没有出现失效情况啊。
    而且$_FILE["upload_file"]["type"]也一直在用。
    网上的教程都是这么写的。今天才知道它原来是浏览器提供的。
      

  2.   

    如果是处理图片,可以使用exif扩展
      

  3.   

    fileinfo扩展可以判断文件类型,但是这个扩展正在开发中,不保证能够正确判断文件的类型
      

  4.   

    http://www.php.net/manual/en/ref.fileinfo.php
    http://www.php.net/manual/en/ref.exif.php
      

  5.   

    exif扩展试一试呢http://www.php.net/manual/en/ref.exif.php
      

  6.   

    直接读取文件的二进制流,然后分析文件头文件信息,文件的头x个字节都是该文件的基本信息,可以判断出流文件类型.但关键是不知道php能不能直接读取和写入文件....如果能就好了,写验证码都不用GD库了.....
      

  7.   

    php自己写函数绝对可以达到的。我就有这样的代码。不过那得回家才能给你噢~现在是没有的
      

  8.   

    if ($photo != "")  
    {
    $file_postfix = substr($p,strrpos($p,"."));
    if (!in_array($file_postfix,$FILE_POSTFIX))  //判断扩展名字
    {
        echo "<script language='javascript'>alert('图片格式不对!');window.history.back();</script>";      
    }
    else 
    {
    $fp   = fopen($photo,"r");
    $data = addslashes(fread($fp,filesize($photo)));
    }
    }
      

  9.   

    刚想说$_FILE["filename"]["type"]...
    文件类型可以用$_FILE["filename"]来截断文件名获取后缀的方法判断类型.不过这也不值得信任.
    这似乎要从PE文件格式来下手了.
      

  10.   

    //判断上传文件时候合法
    function file_suffixal($file_suffixal,$file_size = 0){
    global $my_file;
    if(!file_size_big($file_size)){
    switch ($my_file->file_type_suffixal($file_suffixal)){
    case ".jpg": break;
    case ".gif": break;
    case ".bmp": break;
    case ".png": break;
    case ".txt": break;
    case ".xls": break;
    case ".doc": break;
    default: 
    echo "<script language=javascript>alert('上传的文件类型不正确');history.back(-1);</script>";
    die();
    break;
    }
    }
    }//判断上传文件大小
    function file_size_big($file_size_big){
    if(($file_size_big <= 0) or ($file_size_big > 1048576)){
    echo "<script language=javascript>alert('请选择要上传的文件或文件应在2M以内');history.back(-1);</script>";
    die();
    }
    }
      

  11.   

    //取文件后缀
    function file_type_suffixal($file_type_suffixal){
    return "." . strtolower(array_pop(explode(".",$file_type_suffixal)));
    }
      

  12.   

    楼主不信任Mime类型是有原因的.那些靠文件后缀来判断类型的方法统统pass.
    我这里有个*.exe文件,我把后缀改了成txt,就能骗过你的检验程序上传成功,虽然没法立刻执行,但当我某天搞到了你网站的web shell,就可以把后缀改回来,再执行这个程序了.
      

  13.   

    再说一次,getimagesize函数可以取得图像文件的类型,不知道的请去翻手册
    某天搞到了你网站的web shell,就可以把后缀改回来,再执行这个程序了.---------------------
    搞到了web shell,并且能改文件,还需要再利用这个漏洞吗
      

  14.   

    可以去查一下 getimagesize 的源码。getimagesize 好像也是判断文件的头,如果文件头被篡改,就得不到。
      

  15.   

    学习了
    刚查了一下手册
    getimagesize 在php5以上返回数组
    key[0] 宽
    key[1] 长
    key[2] 文件类型本函数不需打开GD扩展
      

  16.   

    可以去查一下 getimagesize 的源码。getimagesize 好像也是判断文件的头,如果文件头被篡改,就得不到。-------------------你觉得如何才能说某一个文件是一张图片呢?
    改了文件头,它就是一个图片文件了,只不过算是损坏的图片文件
      

  17.   

    可以去查一下 getimagesize 的源码。getimagesize 好像也是判断文件的头,如果文件头被篡改,就得不到。-------------------你觉得如何才能说某一个文件是一张图片呢?
    改了文件头,它就是一个图片文件了,只不过算是损坏的图片文件=========================================================同意
      

  18.   

    嗯,geimagesize 是正解,结帖
      

  19.   

    geimagesize
    $_FILE["upload_file"]["type"]都可以
    你说了,高手可以自己写客户端,发送木马上来,但是有一点,你怎么去执行这个web sell
    如果你有能力通过客户端把.jpg 改成 .php 这是什么,这是对服务器目录有操作权限了,除非web管理员开放了php 的 rename服务,否则想通过web方式你无论如何也改不了,改不了就永远都不能执行。你说你拿下其它洞洞,再来改,我看那也没有这个必要上传啦,所以说php是较安全的呢!
      

  20.   

    GetImageSize
    取得图片的长宽。语法: array getimagesize(string filename, array [imageinfo]);返回值: 数组函数种类: 图形处理
     
     
    内容说明 
    本函数可用来取得 GIF、JPEG 及 PNG 三种 WWW 上图片的高与宽,不需要安装 GD library 就可以使用本函数。返回的数组有四个元素。返回数组的第一个元素 (索引值 0) 是图片的高度,单位是像素 (pixel)。第二个元素 (索引值 1) 是图片的宽度。第三个元素 (索引值 2) 是图片的文件格式,其值 1 为 GIF 格式、 2 为 JPEG/JPG 格式、3 为 PNG 格式。第四个元素 (索引值 3) 为图片的高与宽字符串,height=xxx width=yyy。可省略的参数 imageinfo 用来取得一些图片的相关信息,例如 IPTC (http://www.xe.net/iptc) 的 APP13 标记,就可以加在图片中,可利用 iptcparse() 来解析。