簡體   English   中英

PHP-檢查文件類型

[英]PHP - Checking file types

我已經編寫了一些代碼來檢查擴展名的文件輸入,並僅在允許的情況下通過,但似乎無法正常工作。

我使用以下命令調用該函數:

$vcFileType = check_filetype($HTTP_POST_FILES['cv']['name'],"That filetype isnt allowed punk",array('doc','docx','pdf'));

其功能如下:

function check_filetype($file, $problem='', $types){
    $fileExt = substr($file, strrpos($file, '.') + 1);
    if(in_array($fileExt, $types)){
        show_error($problem);
    }
    return $file;
}

如果有人能讓我知道我要去哪里錯了,那將是很大的事情。

干杯,

if (in_array($fileExt, $types)) {
    show_error($problem);
}

“如果擴展名是允許的擴展名之一,請顯示錯誤...”

除了這種邏輯故障之外:永遠不要相信用戶提供的文件名!
它是完全任意的,很容易偽造。
嘗試實際處理文件或查找其MIME類型

確實,檢查文件名的擴展名不是保存的方法。 例如,仍然有人可以將惡意文件隱藏在PDF文件中。

檢查擴展名可能是進行初始檢查的好方法,但是如果擴展名不正確,則可以跳過啞劇檢查。

看來您只是在抓住擴展程序的第一個字符。 字符串位置+1。

另外,由於您要查找“。”的第一個實例。 您的程序將以諸如inc.functions.php之類的名稱中斷。

試試這個代替:

function check_filetype($file, $problem='', $types){
    $file_parts = explode(".", $file);
    $fileExt = array_pop($file_parts);
    if(in_array($fileExt, $types)){
        show_error($problem);
    }
    return $file;
}

這會將文件名轉換為基於“。”的數組。 不管名稱中有多少,然后返回該數組的最后一個元素-擴展名。

如果您使用的是Unix,則可以使用file命令:它檢查文件的內容以推斷其類型。

暫無
暫無

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

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