Often Misused : <input type="file"> 前後端檢核上傳檔案副檔名

Select *
Program
Published in
May 27, 2021

程式碼在碼源檢測做弱點掃描後,顯示Often Misused: File Upload 的問題,顯示以下程式碼有問題:

<input name="file" type="file" accept=".xlsx,.xls" />file 類型的標籤表示程式接受檔案上傳。
在可以避免的情況下,請勿允許檔案上傳。如果程式必須接受上傳的檔案,則應只接受程式預期的特定內容類型,阻 止攻擊者提供惡意內容。

經高手指點後,除了前端要檢核外接收副檔名外,後端也必須檢核。
因為資安軟體在掃描時,會去執行上傳檔案的操作,並竄改副檔名繞過前端檢核。
因此,若後端沒做到副檔名檢核的話,在碼源檢測時會顯示<input>標籤沒過關的訊息。

前端限制上傳檔案類型

<input name="file" type="file" accept=".xlsx,.xls" />

accept為限制只接受何種副檔名上傳。
指定為.csv,則為accept=".csv"。
指定為.txt,則為accept=".txt"。
多種檔案類型則以,區隔,accept=".xlsx,.xls,.csv,.txt"。

後端限制上傳檔案類型

後端程式在讀取檔案之前,加入判斷。

//抓取上傳檔案之副檔名
string extension = Path.GetExtension(file.FileName);
//判斷副檔名是否為指定之副檔名
if (extension.ToLower().Trim() != ".xlsx" && extension.ToLower().Trim() != ".xls")
{
throw new Exception(“請確認副檔名是否正確!”);
}

完整程式碼:

--

--