亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 php上傳文件的最佳和安全方式

使用 php上傳文件的最佳和安全方式

PHP
LEATH 2022-12-23 16:05:12
我花了很多時間在谷歌上尋找用 PHP 上傳文件最安全的方法。在那里我發現了一些技術,如檢查文件擴展名、重命名文件或許多其他技術,所以請告訴我是否還有其他選擇。
查看完整描述

1 回答

?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

這個問題已經在這里問過了。但是您可以使用我自己的代碼,因為它既簡單又安全。


function hc_upload($f,$username='',$verify_type=1,$size=2048)

{

    $f=$_FILES[$f];

    $file_name=strtolower($f['name']);

    $file_type=strtolower($f['type']);

    $file_size=strtolower($f['size']);

    $file_extenstion =end(explode('.',$file_name));

    $file_extenstion2=strtolower(pathinfo(basename($file_name),PATHINFO_EXTENSION));


    if($file_extenstion2!=$file_extenstion){

        $err["error"]=true;

        $err["message"]="Invalid file extension.";

        return $err;

    }

    if($file_size > $size*1000){

        $err["error"]=true;

        $err["message"]="File is too large.";

        return $err;

    }


    $ext_verify=0;

    if(gettype($verify_type)!='array')

    {

        $verify_type=(string)$verify_type;

        if((strpos($verify_type,"1") > -1 || $verify_type=="*") &&  $ext_verify==0)

        {

            $mimes['ext']=array("jpg","jpeg","gif","png");

            $mimes['mime']=array("image/jpg","image/jpeg","image/gif","image/png");

            if(in_array($file_extenstion,$mimes['ext']) && in_array($file_type,$mimes['mime'])){$ext_verify=1;}

        }

        if((strpos($verify_type,"2") > -1 || $verify_type=="*") &&  $ext_verify==0)

        {

            $mimes['ext']=array("doc","docx","pdf","xls","xlsx","ppt","pptx");

            if(in_array($file_extenstion,$mimes['ext'])){$ext_verify=1;}

        }


        if((strpos($verify_type,"3") > -1 || $verify_type=="*") &&  $ext_verify==0)

        {

            $mimes['ext']=array("mp3","wav","weba","3gp","mp4","mov","mpeg","avi");

            $mimes['mime']=array("audio/mpeg","audio/wav","audio/webm","audio/3gpp","video/3gpp","video/mp4","video/quicktime","video/mpeg","video/x-msvideo");

            if(in_array($file_extenstion,$mimes['ext']) && in_array($file_type,$mimes['mime'])){$ext_verify=1;}

        }

    }

    else

    {

        if(array_key_exists("mime",$verify_type) && array_key_exists("ext",$verify_type)){

            if(in_array($file_extenstion,$verify_type['ext']) && in_array($file_type,$verify_type['mime'])){$ext_verify=1;}

        }

        elseif(array_key_exists("ext",$verify_type)){

            if(in_array($file_extenstion,$verify_type['ext'])){$ext_verify=1;}

        }

        elseif(array_key_exists("mime",$verify_type)){

            if(in_array($file_type,$verify_type['mime'])){$ext_verify=1;}

        }

        else{

            if(in_array($file_extenstion,$verify_type)){$ext_verify=1;}

        }

    }


    if($ext_verify==0){

        $err["error"]=true;

        $err["message"]="Seems your file is not valid";

        return $err;

    }


    $upload_dir='upload/'.$username.'/';

    if(!is_dir($upload_dir)){

        if(!mkdir($upload_dir,0777,true)){

            $err["error"]=true;

            $err["message"]="Unknown error, kindly contact admin";

            return $err;

        }

    }


    $upload_file=$upload_dir.sha1_file($f['tmp_name']);

    if(!file_exists($upload_file)){

        if(!move_uploaded_file($f['tmp_name'], $upload_file)){

            $err["error"]=true;

            $err["message"]="Unknown error, kindly contact admin";

            return $err;

        }

    }


    $err["error"]=true;

    $err["message"]="SUCCESS";

    $err["dir"]=$upload_file;

    return $err;

}

HTML 示例代碼是


<form action="upload.php" method="post" enctype="multipart/form-data">

    Select image to upload:

    <input type="file" name="fileToUpload" id="fileToUpload">

    <input type="submit" value="Upload Image" name="submit">

</form>

所以只需在php中調用這個函數


hc_upload('fileToUpload','',123) 您可以通過給定兩個第二個參數和第三個參數的值來為每個用戶名創建文件夾兩個檢查文件是圖像或文檔還是音頻/視頻媒體,還可以傳遞擴展名數組以進行手動檢查


查看完整回答
反對 回復 2022-12-23
  • 1 回答
  • 0 關注
  • 114 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號