[英]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.