zoukankan      html  css  js  c++  java
  • php图片上传检测是否为真实图片格式

    PHP 图片上传,如果不做任何判断的话,随便一个文件如 rar,zip,php,java等文件改个文件名,改个后缀就能以图片形式上传的服务器,往往会造成极大的危害!

    工具/原料

     
    • PHP
    • apache / nginx / iis
    • phpstorm / netbeans / notepad++ / editplus

    方法/步骤

     
    1. 1

      第一种方法:如果是只是单纯判断是否是图片格式的话,我使用  getimagesize 方法function checkIsImage($filename){    $alltypes = '.gif|.jpeg|.png|.bmp';//定义检查的图片类型    if(file_exists($filename)){        $result= getimagesize($filename);        $ext = image_type_to_extension($result']);        return stripos($alltypes,$ext);    }else{        return false;    }}

      php图片上传检测是否为真实图片格式
      php图片上传检测是否为真实图片格式
    2. 2

      第二种方法比较强大一些,能判断多种格式function getReailFileType($filename){    $file    = fopen($filename, "rb");    $bin    = fread($file, 2); //只读2字节    fclose($file);    $strInfo    = @unpack("C2chars", $bin);    $typeCode    = intval($strInfo['chars1'].$strInfo['chars2']);    $fileType    = '';    switch($typeCode){        case 7790:            $fileType = 'exe';break;        case 7784:            $fileType = 'midi'; break;        case 8297:            $fileType = 'rar'; break;        case 255216:            $fileType = 'jpg';break;        case 7173:            $fileType = 'gif';break;        case 6677:            $fileType = 'bmp';break;        case 13780:            $fileType = 'png';break;        default:            $fileType = 'unknown';    }    return $fileType;}

      php图片上传检测是否为真实图片格式
    3. 3

      第三种方法:

      PHP  gd类库函数提供了一个exif_imagetype() 函数, 用来读取图像的第1个字节, 还会对图片的签名做检查。 如果格式不对,会返回false。 其实啊, 这个方法和第一种方法有异曲同工之妙。 但是因为这个是库函数,效率要比第一种方法高得多。

      此函数用法很简单,传入路径,然后通过判断是否等于某个常量,  例如 gif格式的IMAGETYPE_GIF

      thinkphp有用到这个判断www hinkphplibrary hinkValidate.php

      php图片上传检测是否为真实图片格式
    4. 4

      第四种方法:php重绘

      效率很低的一种方法,但也是一种思路: 把传输过来的文件,不论什么文件都以resource 类型绘到图片中去, 如果是图片,能还原出来。如果不是图片,那绘画不出来,而且里面的危险代码也没有了。

      具体请看:

      php图片上传检测是否为真实图片格式
    5. 5
      总结: 我曾经在网上看到过有人说:相信懂得php的人都用过XX函数。 我打开一看,就是一个使用后缀来判断上传类型的函数。 同学在做类似功能的时候一定要揭开表现看到本质,否则经过伪装的图片在上传之后,会对服务器造成极大安全隐患
  • 相关阅读:
    在web项目下注册MySQL数据库驱动失败
    Servlet 调用过程
    请求时参数到后台解码时会出现乱码问题
    Request 部分功能
    dom4j增删改查
    微信消息处理JAXP-sax解析
    微信消息处理JAXP-dom解析
    inputstream与其他格式的转换
    微信消息处理
    将Gridview导出到Excel
  • 原文地址:https://www.cnblogs.com/wujunbin/p/7482723.html
Copyright © 2011-2022 走看看