본문 바로가기
Java/SpringBoot

[Spring Boot] WebUtil Class 생성 - XSS, SQL injection 보안 취약점 방지

by 리요_ 2024. 11. 14.
반응형

 

[Spring Boot] WebUtil Class 생성 - XSS, SQL injection 보안 취약점 방지

Spring Boot 에서 사용한 유틸클래스여서 해당 카테고리에 넣었지만, Spring 에서도 적용 가능합니다!

⭐ WebUtil.java

교차 사이트 스크립팅(XSS) 공격 경로 조작 공격을 방지하기 위한 유틸리티 클래스인 WebUtil 클래스를 생성해줍니다.

 

 

clearXSSMinimum(String value)

  • 사용자 입력 데이터 에서 XSS 공격 가능성이 있는 문자를 최소한으로 제거 합니다.
  • 특수문자 (&, <, >, ", ', .) 를 HTML엔티티로 변환합니다.

clearXSSMaximun(String value)

  • clearXSSMunumum 메서드를 호출하고, 추가로 경로 조작 공격을 방지하기 위한 문자열 치환을 수행합니다.
  • 상위 디렉토리 접근 문자열 (../)과 현재 디렉토리 접근 문자열(./)을 제거합니다.

 

filePathBlackList(String value)

  • 사용자 입력 데이터에서 상위 디렉토리 접근 문자열(..)을 제거합니다.

filePathReplaceAll(String value)

  • 사용자 입력 데이터에서 경로 관련 문자열(/, \\,\\.\\.,&)을 제거합니다.

fileInjectionPathReplaceAll(String value)

  • 사용자 입력 데이터에서 경로 관련 문자열(/, \\.., \\\\, &)을 제거합니다.

filePathWhiteList(String value)

  • 사용자 입력 데이터를 그대로 반환합니다.

 

isIPAddress(String str)

  • 입력 문자열이 IP주소 형식인지 확인합니다.

removeCRLF(String parameter)

  • 입력 문자열에서 캐리지 리턴(CR) 줄바꿈(LF)문자를 제거합니다.

removeSQLInjectionRisk(String paremeter)

  • 입력 문자열에서 SQL inJection 공격 위험이 있는 문자 (공백, \\*, %, ;, -, \\+, ,)를 제거합니다.

removeOSCmdRisk(String parameter)

  • 입력 문자열에서 OS 명령어 실행 위험이 있는 문자(공백, \\*, |, ;)를 제거합니다.
package com.liyo.service.cmm;

import java.util.regex.Pattern;

public class WebUtil {
    public static String clearXSSMinimum(String value) {
        if (value == null || value.trim().equals("")) {
            return "";
        }

        String returnValue = value;

        returnValue = returnValue.replaceAll("&", "&amp;");
        returnValue = returnValue.replaceAll("<", "&lt;");
        returnValue = returnValue.replaceAll(">", "&gt;");
        returnValue = returnValue.replaceAll("\"", "&#34;");
        returnValue = returnValue.replaceAll("\'", "&#39;");
        returnValue = returnValue.replaceAll("\\.", "&#46;");
        returnValue = returnValue.replaceAll("%2E", "&#46;");
        returnValue = returnValue.replaceAll("%2F", "&#47;");
        return returnValue;
    }

    public static String clearXSSMaximum(String value) {
        String returnValue = value;
        returnValue = clearXSSMinimum(returnValue);

        returnValue = returnValue.replaceAll("%00", null);

        returnValue = returnValue.replaceAll("%", "&#37;");

        // \\. => .

        returnValue = returnValue.replaceAll("\\.\\./", ""); // ../
        returnValue = returnValue.replaceAll("\\.\\.\\\\", ""); // ..\
        returnValue = returnValue.replaceAll("\\./", ""); // ./
        returnValue = returnValue.replaceAll("%2F", "");

        return returnValue;
    }

    public static String filePathBlackList(String value) {
        String returnValue = value;
        if (returnValue == null || returnValue.trim().equals("")) {
            return "";
        }

        returnValue = returnValue.replaceAll("\\.\\.", "");

        return returnValue;
    }

    public static String filePathReplaceAll(String value) {
        String returnValue = value;
        if (returnValue == null || returnValue.trim().equals("")) {
            return "";
        }

        returnValue = returnValue.replaceAll("/", "");
        returnValue = returnValue.replaceAll("\\", "");
        returnValue = returnValue.replaceAll("\\.\\.", ""); // ..
        returnValue = returnValue.replaceAll("&", "");

        return returnValue;
    }

    public static String fileInjectPathReplaceAll(String value) {
        String returnValue = value;
        if (returnValue == null || returnValue.trim().equals("")) {
            return "";
        }

        returnValue = returnValue.replaceAll("/", "");
        returnValue = returnValue.replaceAll("\\..", ""); // ..
        returnValue = returnValue.replaceAll("\\\\", "");// \
        returnValue = returnValue.replaceAll("&", "");

        return returnValue;
    }

    public static String filePathWhiteList(String value) {
        return value;
    }

    public static boolean isIPAddress(String str) {
        Pattern ipPattern = Pattern.compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");

        return ipPattern.matcher(str).matches();
    }

    public static String removeCRLF(String parameter) {
        return parameter.replaceAll("\r", "").replaceAll("\n", "");
    }

    public static String removeSQLInjectionRisk(String parameter) {
        return parameter.replaceAll("\\p{Space}", "").replaceAll("\\*", "").replaceAll("%", "").replaceAll(";", "")
                .replaceAll("-", "").replaceAll("\\+", "").replaceAll(",", "");
    }

    public static String removeOSCmdRisk(String parameter) {
        return parameter.replaceAll("\\p{Space}", "").replaceAll("\\*", "").replaceAll("|", "").replaceAll(";", "");
    }
}

 

WebUtil 클래스는 SQL injection, OS 명령어 실행 위험을 제거 등의 메서드를 통해 다양한 보약 취약점을 방지합니다.

반응형