개발 메모장

[보안] 파일 업로드 시 취약점 사전 대응 방법(Java, Windows) 본문

보안

[보안] 파일 업로드 시 취약점 사전 대응 방법(Java, Windows)

yyyyMMdd 2023. 11. 30. 17:10
728x90

#. 업로드 파일에 대한 검증이 적절히 이뤄지지 않으면 공격자에 의해 서버가 공격당할 수 있습니다.

 

#. 원격 침투 후 시스템 계정 탈취 및 시스템에 명령어를 실행하여 서버 자체를 마비시킬 수도 있습니다.

 

#. 이에 따른 사전 대응 방법에 대해 알아보도록 하겠습니다.

 


#. 대응방안

 

1. 파일 확장자에 대한 화이트리스트 적용

    - 스크립트에서도 하겠지만 백엔드에서 처리하는 것이 가장 안전합니다.

    - 블랙리스트로 블록을 걸기보단 화이트리스트로 처리하는 이유는 쉽게 알 수 있듯 확장자는 변경도 가능하고 무수히 많기 때문입니다.

    - 따라서 허용할 확장자만 열도록 화이트리스트를 관리하는 것이 유용합니다.

<input type="file" onchange="checkFile(this)" />
function checkFile(f) {
    const file = f.files.toLowerCase();
    const str = f.value;
    
    if(!/\.(xls|xlsx)$/i.test(file[0].name) {
    	alert("엑셀 파일 아님");
    } else {
    	return;
    }
}
public void uploadFileCheck(MultipartFile multipartFile) { 
	String originName = multipartFile.getOriginalFileName();
    
    if(originName.endsWith(".xls") || originName.endsWith(".xlsx")) {
    	정상처리 로직;
    } else {
    	오류 로직;
    }
}

 


2. 파일 사이즈 체크

    - 파일이 비정상적으로 큰 용량일 경우에 대해서도 확인해 줄 필요가 있습니다.

<input type="file" onchange="checkFileSize(this)" />
function checkFileSize(f) {
	const maxSize = 10 * 1024; // 10KB
	if(f.size) {
    	if(f.size <= maxSize) {
        return true;
        } else {
        	alert("10KB가 넘는 파일입니다.")
            return false;
        }
    } else {
    	return false;
    }
}

 


3. 업로드 폴더의 스크립트 실행 권한 해제


    - 특정 폴더에 업로드된 경우라 하더라도 스크립트 실행 권한이 없을 경우 공격자는 스크립트 실행을 할 수 없게 됩니다.


    - 제어판 > 관리 도구 > IIS(인터넷 정보 서비스) 관리자 > 처리기 매핑

 


4. 업로드 폴더 Static 설정

    - 업로드 폴더를 고정하지 않을 경우 위 스크립트 실행 권한을 해제한 폴더가 아닌 다른 폴더로 변경하여 실행할 수 있습니다.

 

 

===========================================================
틀린 내용이 있거나 이견 있으시면 언제든 가감 없이 말씀 부탁드립니다!
===========================================================

728x90