개발자의 끄적끄적

[java/spring] 파일확장자를 필터링 하는 클래스 - FileExtFilter [펌] 본문

개발/java & jsp

[java/spring] 파일확장자를 필터링 하는 클래스 - FileExtFilter [펌]

효벨 2020. 8. 13. 02:00
728x90
반응형

[java/spring] 파일확장자를 필터링 하는 클래스 - FileExtFilter [펌]

 

간단하게 파일확장자를 체크하는 클래스를 만들어보았다. 

기본적으로 확장자의 대소문자를 구분하여 필터링 시킬 확장자를 포함한 파일에 대해 에러 및 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;

    }

    

 

 

}




 

 

출처: https://devsh.tistory.com/entry/파일확장자를-필터링-하는-클래스-FileExtFilter [날샘 코딩]

반응형
Comments