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\thinkphp\library\think\Validate.php

    php圖片上傳檢測是否為真實圖片格式
  4. 4

    第四種方法:php重繪

    效率很低的一種方法,但也是一種思路: 把傳輸過來的文件,不論什么文件都以resource 類型繪到圖片中去, 如果是圖片,能還原出來。如果不是圖片,那繪畫不出來,而且里面的危險代碼也沒有了。

    具體請看:

    php圖片上傳檢測是否為真實圖片格式
  5. 5
    總結: 我曾經在網上看到過有人說:相信懂得php的人都用過XX函數。 我打開一看,就是一個使用后綴來判斷上傳類型的函數。 同學在做類似功能的時候一定要揭開表現看到本質,否則經過偽裝的圖片在上傳之后,會對服務器造成極大安全隱患


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM