通常要檢測上傳檔案白名單可以用副檔名來檢測,不過副檔名是可以變造的,最常見的就是勒索病毒,比較安全的方法用上傳檔案的MIME來檢測,這樣就算變造過的副檔名一樣會被檢測出來,防止伺服器被駭,方法如下:
foreach($_FILES['fileval']['tmp_name'] as $i=> $val){
//檢測文件的 MIME 內容類型
$mime_type = mime_content_type($val);
//可上傳MIME類型JPG,PNG,GIF,Word,Excel,PowerPoint,pdf
//可再增加MIME類型
$allowed_file_types = ['image/png', 'image/jpeg','image/gif','application/msword','application/vnd.ms-excel','application/vnd.ms-powerpoint','application/pdf','application/vnd.openxmlformats-officedocument.presentationml.presentation','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
if (!in_array($mime_type, $allowed_file_types)) {
$failed.=$_FILES['fileval']["name"][$i].',';
}
}
if(!empty($failed)){
echo '您上傳的檔案'.$failed.'不符合上傳規定';
exit;
}
只要不是在上傳白名單中的檔案都會終止程式,也可以做導向返回首頁,讓檔案無法上傳,白名單內的檔案通過驗證後,就能進行下一步驟的檔案上傳執行,以上工作心得分享,有需的朋友參考看看!
工作心得撰寫:徐嘉裕 Neil hsu
留言
張貼留言