SWM-99-degree / jariBean

SWM 14th JariBean Project
0 stars 1 forks source link

[REFACTOR] 악의적인 파일 업로드를 방지하기 위한 MIME 검사 #251

Closed isayaksh closed 1 year ago

isayaksh commented 1 year ago

✏️ Description

현재 서비스에서 저장하는 이미지는 image/jpg, image/jpeg, image/png, image/webp, image/heic 타입에 해당하면서 10MB 이하의 용량을 가진 파일만 S3에 저장할 수 있도록 관리하고 있다. 이미지 타입을 위 5개 타입으로 한정한 이유는 만약 .exe 파일이 업로드된 후 다른 사용자가 해당 .exe 파일을 실행하게 될 경우 악성 프로그램이 실행될 수도 있기 때문이다.

🔥 Problem

악의적인 사용자가 파일을 변조하여 악성 코드를 심어 S3에 파일을 저장하게 된다면 다른 사용자가 해당 파일에 접근했을 경우 문제가 발생할 수 있다. 따라서 해당 문제를 방지하기 위해 현재는 확장자에 대한 검사만 진행하고 있지만, 확장자를 변경하여 파일을 업로드할 수도 있다는 것을 고려하여 업로드된 파일의 MIME와 현재 확장자를 교차 검증하는 로직을 추가한다.

isayaksh commented 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에 대한 처리하고 있는 로직이 존재하였다.