본문 바로가기
C#

C#] 파일 업로드 시, MIME TYPE 체크, 확장자 필터링

by Fastlane 2020. 10. 15.
728x90
반응형

1. 원하는 업로드 파일 개수와, 확장자가 정해져 있을 경우 아래 함수 호출하여 에러 메시지를 return 받을 수 있다. 

        public string CheckValidFile(HttpFileCollectionBase files, int count, string fileTypes)
        {
            int fileCount = 0;
            string[] fileType = fileTypes.Split(',').ToArray();
            foreach (string fileName in files)
            {
                foreach (string file in fileType) {

                    HttpPostedFileBase fileBase = files[fileName];
                    if (fileBase.ContentLength == 0) continue;
                    if (fileBase.ContentType == file)
                        fileCount++;
                }
            }

            if (fileCount == 0)
                return "pdf/jpg/png 형식의 파일을 첨부해주세요!";

            if (fileCount != count)
                return count.ToString() + "개만 첨부해주세요!";

            return "";
        }

호출 소스 

var msg = globalfileuploader.CheckValidFile(Request.Files, 1, "application/pdf,image/png,image/jpg,image/jpeg");
if (msg != "")
{
    return Json(new { ErrorMessage = msg }, JsonRequestBehavior.AllowGet); 
}

 

2. 파일 업로드 시, 보안에 위협이 되는 파일 확장자를 필터링 할 수 있다. 

        private bool CheckValidFile(HttpFileCollectionBase files)
        {
            bool isValid = true;
            string[] badFileType = "asp,asa,aspx,html,htm,hta,htr,cdx,cer,jsp,php".Split(',').ToArray();
            foreach (string fileName in files)
            {
                HttpPostedFileBase fileBase = files[fileName];
                if (fileBase.ContentLength == 0) continue;

                string fileNameExtension = Path.GetExtension(fileBase.FileName).Replace(".", "");
                if (badFileType.Contains(fileNameExtension, StringComparer.OrdinalIgnoreCase))
                    isValid = false;
            }
            
            return isValid;
        }

호출 소스 

if (CheckValidFile(files))
{
    //업로드 소스 구현                   
}

 

728x90
반응형

댓글