Filter XSS Cross-Site Scripting (XSS) 필터


Cross-Site Scripting (XSS)에대한 방어책은 다양하게 많지만, 그 방어책 중에 하나인 필터를 활용하는 방법을 공유합니다. 

참고 소스인 com.josephoconnell.html.HTMLInputFilter.class를 활용한 필터를 만들어 봤습니다. 

보안 위협 요소중의 하나인 Cross-Site Scripting (XSS) 에 대한 대비책으로 활용할 만합니다. 


1. 참조 필터


- 참조 클래스com.josephoconnell.html.HTMLInputFilter.class


2. HTMLinputFilter을 활용한 필터 샘플 소스


- RequestWrapper 클래스 



package client;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

import com.josephoconnell.html.HTMLInputFilter;


public class RequestWrapper extends HttpServletRequestWrapper {

public RequestWrapper(HttpServletRequest servletRequest){

super(servletRequest); 

}


public String[] getParameterValues(String parameter){


String[] values = super.getParameterValues(parameter);

if(values == null){

return null;

}

int count = values.length;

String[] encodedValues = new String[count];

for(int i = 0; i < count; i++){

encodedValues[i] = filter(values[i]);

}

return encodedValues;

}


public String getParameter(String parameter){

String value = super.getParameter(parameter);

if(value == null){

return null;

}

return filter(value);

}


public String filter(String input){

if(input == null){

return null;

}

String clean = new HTMLInputFilter().filter(input.replaceAll("\"", "%22").

replaceAll("\'","%27"));


return clean.replaceAll("<", "%3C").replaceAll(">", "%3E");

}

}


- XssFilter 클래스



package client;


import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;


public class XssFilter implements Filter {

private FilterConfig fc;

public void destroy(){

this.fc = null;

}


public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain)                             throws IOException, ServletException {

chain.doFilter(new RequestWrapper((HttpServletRequest) req), resp);

}


public void init(FilterConfig fc) throws ServletException {

this.fc = fc;

}

}



3. web.xml 필터 적용



<FILTER>  

    <FILTER-NAME>XSS</FILTER-NAME>  

    <DISPLAY-NAME>XSS</DISPLAY-NAME>  

    <DESCRIPTION></DESCRIPTION>  

    <FILTER-CLASS>client.XssFilter</FILTER-CLASS>  

</FILTER>  

<FILTER-MAPPING>  

    <FILTER-NAME>XSS</FILTER-NAME>  

    <URL-PATTERN>/*</URL-PATTERN>  

</FILTER-MAPPING>








'JAVA' 카테고리의 다른 글

[JAVA]Filter 응용  (0) 2017.11.21
[JAVA]filter 사용자관리  (0) 2017.11.16
[JAVA]filter ServletContext  (0) 2017.11.16
[JAVA]Filter sendRedirect  (0) 2017.11.16
[JAVA]Filter responseWrapper  (0) 2017.11.16
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,