File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package egovframework.com.cmm;
import java.util.Enumeration;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import egovframework.com.cmm.util.EgovXSSUtil;
public class InterceptorHandler extends HandlerInterceptorAdapter{
private static final Pattern SQL_PATTERN = Pattern.compile(
"(?i)(select|insert|delete|update|create|drop|alter|where|substr|substring|group by|union|xp_cmdshell|and|or|having|from|unio|case|when|if|--|;|/\\*|\\*/|\\bor\\b|\\band\\b)"
);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
/**
* URL 호출 전 넘어오는 파라미터 체크
* request로 넘어오는 모든 파라미터 데이터를 검사하여 XSS 문자가 포함되어 있으면 메인화면으로 튕김
* */
boolean returnSts1 = true;
Enumeration e = request.getParameterNames();
while ( e.hasMoreElements() ){
String name = (String) e.nextElement();
{ //XSS 보안조치
if(name.toLowerCase().contains("cmplntreqcn")
|| name.toLowerCase().contains("autcn")
|| name.toLowerCase().contains("file_0")
|| name.toLowerCase().contains("file_1")
|| name.toLowerCase().contains("seccn")
|| name.toLowerCase().contains("nttcn")
) {
String[] values = request.getParameterValues(name);
for (String value : values) {
boolean returnSts = EgovXSSUtil.cleanXSS(value);
if(!returnSts) {//XSS 문자 체크 결과 false일 경우 메인화면으로 이동
returnSts1 = returnSts;
System.out.println("+++++++++++++++++++++++++++XSS 필터 처리 Filter::: ");
System.out.println("name="+ name + ", value="+ value);
System.out.println("+++++++++++++++++++++++++++XSS 필터 처리 Filter End::: ");
response.sendRedirect(request.getContextPath() + "/");
}
}
}
}
{ //SQL Injection 보안조치
if(name.toLowerCase().contains("searchsortcnd")
|| name.toLowerCase().contains("searchsortord")
) {
//파라미터 중에 URL 주소를 넘겨주는 부분이 있어서 해당 부분에것 select~, update~, delete~ 로 시작하는 주소경로가 있어서 제외처리를 하였음
String[] values = request.getParameterValues(name);
for (String value : values) {
if (value != null && SQL_PATTERN.matcher(value.toLowerCase()).find()) {
System.out.println("+++++++++++++++++++++++++++XSS Html 필터 처리 Filter Start::: ");
System.out.println("name="+ name + ", value="+ value);
System.out.println("+++++++++++++++++++++++++++XSS Html 필터 처리 Filter End::: ");
response.sendRedirect(request.getContextPath() + "/");
}
}
}
}
}
if(!returnSts1) {//XSS 포함문자가 있는경우 메인화면으로 이동시킨다.
response.sendRedirect(request.getContextPath() + "/");
return true;
}
return true;
}
/*
* view 화면으로 데이터가 넘어가기 이전에 실행
* modelAndView 값을 체크할 수 있음
* */
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
/*
*
* view에서 모든 처리를 완료한 후에 실행
* */
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
super.afterCompletion(request, response, handler, ex);
}
}