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
반응형

+ Recent posts