일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- QueryDSL
- Jenkins
- 스트림
- poi
- 대용량 업로드
- sqlserver
- 보안
- ORM
- 자동배포
- mom
- 그리드
- ci/cd
- Javascript
- rabbitmq
- stream api
- mssql
- java
- jqGrid
- 엑셀 업로드
- docker
- 자바8
- JQuery
- Stream
- MessageQueue
- spring
- 제이쿼리그리드
- 자동빌드
- apache.poi
- JPA
- DevOps
- Today
- Total
개발 메모장
[보안] 파일 업로드 시 취약점 사전 대응 방법(Java, Windows) 본문
#. 업로드 파일에 대한 검증이 적절히 이뤄지지 않으면 공격자에 의해 서버가 공격당할 수 있습니다.
#. 원격 침투 후 시스템 계정 탈취 및 시스템에 명령어를 실행하여 서버 자체를 마비시킬 수도 있습니다.
#. 이에 따른 사전 대응 방법에 대해 알아보도록 하겠습니다.
#. 대응방안
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 설정
- 업로드 폴더를 고정하지 않을 경우 위 스크립트 실행 권한을 해제한 폴더가 아닌 다른 폴더로 변경하여 실행할 수 있습니다.
===========================================================
틀린 내용이 있거나 이견 있으시면 언제든 가감 없이 말씀 부탁드립니다!
===========================================================
'보안' 카테고리의 다른 글
[CDN] cdn.jsdelivr.net SSL 만료(부트스트랩 오류) (0) | 2024.05.03 |
---|---|
[보안] Jasypt를 이용한 민감정보 암호화 (0) | 2024.03.12 |
[보안] Replay Attack 정의 및 대응 (0) | 2024.01.16 |
[보안] 시큐어 코딩이란? (1) | 2023.12.18 |
[보안-Windows] 방화벽 포트 열기 (1) | 2023.11.27 |