Closed isayaksh closed 1 year ago
private void checkFileValidation(MultipartFile imageFile) {
// check file type
if(imageFile.getContentType() == null || !ALLOWED_IMAGE_TYPES.contains(imageFile.getContentType())) {
throw new CustomApiException(imageFile.getContentType() + " 형식의 파일은 업로드할 수 없습니다.");
}
}
파일의 확장자명만을 검사하고 있는 줄 알았는데, 이미 MIME에 대한 처리하고 있는 로직이 존재하였다.
✏️ Description
현재 서비스에서 저장하는 이미지는
image/jpg
,image/jpeg
,image/png
,image/webp
,image/heic
타입에 해당하면서 10MB 이하의 용량을 가진 파일만 S3에 저장할 수 있도록 관리하고 있다. 이미지 타입을 위 5개 타입으로 한정한 이유는 만약 .exe 파일이 업로드된 후 다른 사용자가 해당 .exe 파일을 실행하게 될 경우 악성 프로그램이 실행될 수도 있기 때문이다.🔥 Problem
악의적인 사용자가 파일을 변조하여 악성 코드를 심어 S3에 파일을 저장하게 된다면 다른 사용자가 해당 파일에 접근했을 경우 문제가 발생할 수 있다. 따라서 해당 문제를 방지하기 위해 현재는 확장자에 대한 검사만 진행하고 있지만, 확장자를 변경하여 파일을 업로드할 수도 있다는 것을 고려하여 업로드된 파일의 MIME와 현재 확장자를 교차 검증하는 로직을 추가한다.