1. 程式人生 > >php如何確保使用者上傳的檔案是安全的

php如何確保使用者上傳的檔案是安全的

1,根據 $_FILES 的size,判斷使用者上傳大小是否超過指定大小

2,對檔案擴充套件進行判斷,防止使用者上傳其他型別字尾程式碼

3,對檔案進行重新命名,防止使用者上傳偽裝檔案,如果 php命令加字尾檔案

如果用源生的寫法,需要自行判斷和進行以上操作,但用tp5的話,很多內容都已經提前被封裝好,備註一下:

<?php
public function touxiang_upload(){
    if(isset($_FILES) && !empty($_FILES)){
        // 移動到框架應用根目錄/public/uploads/ 目錄下
        if($_FILES["file"]["error"]){
            return ['code'=>-1,'msg'=>$_FILES["file"]["error"]];   
        }else{
            //加限制條件
            //判斷上傳檔案型別為png或jpg且大小不超過2048000B
            if(($_FILES["file"]["type"]=="image/png"||$_FILES["file"]["type"]=="image/jpeg") && $_FILES["file"]["size"]<2048000){
                    //防止檔名重複
                    $file_name_array = explode(".",$_FILES['file']['name']);
                    $name = rand(1000,9999).time().rand(1000,9999).".".$file_name_array[1];
                    $name_file = ROOT_PATH."uploads/touxiang/".$name;
                     //檢查檔案或目錄是否存在
                    if(file_exists($name_file)){
                        echo -2; //該檔案已存在,需讓使用者重新上傳 
                    }else{  
                        //儲存檔案,   move_uploaded_file 將上傳的檔案移動到新位置  
                        move_uploaded_file($_FILES["file"]["tmp_name"],$name_file);//將臨時地址移動到指定地址

                        $image = \think\Image::open(ROOT_PATH.'/uploads/touxiang/'.$name);
                        $image->thumb(91, 91,\think\Image:: THUMB_SCALING)->save(ROOT_PATH.'/uploads/touxiang/thumb_'.($name));
                        $thumb_img = '/thumb_'.($name);
                        echo 1; //上傳成功
                    }       
            }else{
                echo -3; //檔案型別不正確或檔案偏大 
            }
        }
    }
}

?>