728x90
반응형
간단하게 파일확장자를 체크하는 클래스를 만들어보았다.
기본적으로 확장자의 대소문자를 구분하여 필터링 시킬 확장자를 포함한 파일에 대해 에러 및 flag값을 발생시킨다.
업무적으로 보안취약점 중 "웹쉘 업로드" 부분떄문에 아래와 같은 유틸리티 클래스를 개발 하여 취약점을 해결하였다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import java.io.File; import java.io.IOException; public class FileExtFilter { /** * 파일의 확장자를 체크하여 필터링된 확장자를 포함한 파일인 경우에 예외를 발생한다. * @param file * */ public static void badFileExtIsReturnException(File file) { String fileName = file.getName(); String ext = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); final String[] BAD_EXTENSION = { "jsp", "php", "asp", "html", "perl" }; try { int len = BAD_EXTENSION.length; for (int i = 0; i < len; i++) { if (ext.equalsIgnoreCase(BAD_EXTENSION[i])) { // 불량 확장자가 존재할떄 IOExepction 발생 throw new IOException("BAD EXTENSION FILE UPLOAD"); } } } catch (IOException e) { e.printStackTrace(); } } /** * 파일의 확장자를 체크하여 필터링된 확장자를 포함한 파일인 경우에 true를 리턴한다. * @param file * */ public static boolean badFileExtIsReturnBoolean(File file) { String fileName = file.getName(); String ext = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); final String[] BAD_EXTENSION = { "jsp", "php", "asp", "html", "perl" }; int len = BAD_EXTENSION.length; for (int i = 0; i < len; i++) { if (ext.equalsIgnoreCase(BAD_EXTENSION[i])) { return true; // 불량 확장자가 존재할때.. } } return false; } } |
728x90
반응형
'JAVA' 카테고리의 다른 글
Locale 클래스를 이용한 표준 국가 명 한글로 얻어오기 (1) | 2014.07.01 |
---|---|
Quartz 라이브러리 연동을 통한 스케쥴러 구현 (0) | 2014.06.06 |
외부 설정파일을 읽어들여 값을 반환하는 ConfigInjector 클래스 (0) | 2014.05.06 |
Filter 클래스를 이용한 호환성보기 헤더 변조 (0) | 2014.03.17 |
String,StringBuffer,StringBuilder 이 세가지중 무엇을 써야 할까요? (0) | 2013.11.09 |