File name
Commit message
Commit date
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);
}
}