前言
最近系統透過 Checkmarx 掃描時,有掃出 Dangerous_File_Upload 的 issue。
主要是針對上傳檔案時,要對它進行檔案的驗證。例如,
- 將檔案存到資料庫或是檔案管理系統。
- 如果要存檔的話,不可以存到 Web 應用程式的範圍之外,例如應用程式是在 D:\RMWeb ,不能將檔案存到 D:\OMGDIR 的目錄。
- 該檔案是不能在 Server 端執行的檔案,例如 ASPX, PHP …
- 驗證上傳檔案的允許附檔名(例如,.GIF, .JPG, .PNG …),必要時要驗證內容是否與允許的附檔名是否一致,要檢查附檔名是否一致可參考 FileExtensionValidation。
解法
從上面的說明中,檔案要透過 Checkmarx Path Traversal 的解法 的處理,再參考上面的說明來處理。
如果呼叫上傳檔案物件的 PostedFile.SaveAs 表示是要存到 Local ,這時,一定要符合上面第二點。
所以檔案路徑一定要透過 Server.MapPath 才會 Pass 哦!
- 註: 那如果要存在 Local ,又無法使用相對路徑呢? 一個暫時解的方式是,先透過 Server.MapPath 暫存檔案後,再使用 File.Copy 到目的目錄。