반응형
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("&", "&");
returnValue = returnValue.replaceAll("<", "<");
returnValue = returnValue.replaceAll(">", ">");
returnValue = returnValue.replaceAll("\"", """);
returnValue = returnValue.replaceAll("\'", "'");
returnValue = returnValue.replaceAll("\\.", ".");
returnValue = returnValue.replaceAll("%2E", ".");
returnValue = returnValue.replaceAll("%2F", "/");
return returnValue;
}
public static String clearXSSMaximum(String value) {
String returnValue = value;
returnValue = clearXSSMinimum(returnValue);
returnValue = returnValue.replaceAll("%00", null);
returnValue = returnValue.replaceAll("%", "%");
// \\. => .
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 명령어 실행 위험을 제거 등의 메서드를 통해 다양한 보약 취약점을 방지합니다.
반응형
'Java > SpringBoot' 카테고리의 다른 글
[Spring Boot] GlobalsProperties 클래스 생성하기 - 정적변수, 전역변수 사용 (1) | 2024.11.18 |
---|---|
[Spring Boot] ResourceCloseHelper Class 생성 - 리소스 관리 (0) | 2024.11.16 |
[SpringBoot] Spring Cloud OpenFeign 생성하기 (1) | 2024.10.05 |
[Spring Boot] StringUtilClass (0) | 2024.09.29 |
[Spring Boot] FTP Server 구현하기 (2) | 2024.09.28 |