簡體   English   中英

檢查文件上傳擴展名(PHP / Jquery / Javascript)

[英]Check File Upload extension (PHP/Jquery/Javascript)

作為頭銜,哪個更好,為什么呢? 這樣做有什么缺點嗎? 我聽說Jquery / Javascript檢查不好,建議使用PHP,但是不知道為什么。

需要任何人的推薦。 提前致謝。

任何人都可以看到這是好是壞:

<input type="file" name="task_doc" class="task_doc"  onChange="checkext();"/>

function checkext(){
var permittedFileType = ['pdf', 'doc', 'docx', 'xls', 'xlsx'];
var fext = $(".task_doc").val().split('.').pop().toLowerCase();
var resultFile = validate_filetype(fext, permittedFileType);
    if(resultFile === false){
         $(".task_doc").replaceWith("<input type='file' name='task_doc'    class='task_doc'  onChange='checkext();'>");
        alert("Invalid Extension");

    }
    else{
        alert("Success");
    }
}

function validate_filetype(fext, ftype)
{
    for(var num in ftype)
    {
        if(fext == ftype[num])
            return true;
    }

    return false;
}

如果您僅使用JavaScript來檢查數據有效性,那么高級用戶將可以上傳他們想要的任何數據。

另一方面,如果用戶輸入的數據(在這種情況下為文件)無效,則使用javascript可能是用戶獲得快速反饋的便捷方法。

因此,我建議同時使用客戶端腳本和服務器端腳本。

您必須假設所有外部數據都受到污染並且可能是惡意的。 用戶可以禁用JavaScript並發送他們想要的任何文件。 或者,用戶可以將文件發送到服務器,然后更改MIME類型和/或擴展名以繞過服務器上的檢查。

最好的選擇是確保將服務器設置為正確處理各種MIME類型,並且默認情況下不將未知文件類型解析為PHP。 換句話說,除了將.php文件作為PHP處理之外,不要將Apache設置為處理任何東西,並且完全阻止.php文件上傳。 從安全角度來看,處理文件上傳是一個棘手的情況。 我強烈建議將上載保存在文檔根目錄之外,將其重命名為只有您知道的隨機字符串(即在上載時將隨機名稱存儲在數據庫中),然后通過PHP將文件發送到瀏覽器。

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($filename));
header('Content-Transfer-Encoding: binary');
readfile($filename);

我建議這樣做是因為將它們存儲在文檔根目錄之外會阻止訪問,使用唯一的文件名會阻止某人直接訪問它,並且強制進行下載(應)阻止任何自動執行惡意文件,因此希望用戶的防病毒軟件能夠找到它....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM