웹 페이지 입력 란에
<script> alert('1111'); </script>
이런 식으로 입력을 하면 입력 정보를 불러 올 때 alert 가 뜨게 될 수 있는데...
이게 악성 스크립트를 전송 하여 클릭 시 PC 의 인증 정보를 수집하여
공격하는 Cross Site Scripting 이 가능 하다고 본다고 한다.
그래서 < , > 등을 입력 받지 못하도록 막아야 한다고 대형 사이트의 보안 권고
사항이 나온다.
JSP 개발 상황이라면 class 2개 를 만들고 web.xml 에 간단한 filter 추가로
해결 할 수 있다.
일단 servlet-api.jar 파일을 lib 폴더에 넣는다. (tomcat 등에 있다.)
그 다음 class 2 개를 추가 한다.
추가 해야 할 class 1
package com.incross.util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
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] = cleanXSS(values[i]);
}
return encodedValues;
}
public String getParameter(String parameter) {
String value = super.getParameter(parameter);
if (value == null) {
return null;
}
return cleanXSS(value);
}
public String getHeader(String name) {
String value = super.getHeader(name);
if (value == null){
return null;
}
return cleanXSS(value);
}
private String cleanXSS(String value) {
//You'll need to remove the spaces from the html entities below
value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
value = value.replaceAll("'", "& #39;");
value = value.replaceAll("eval\\((.*)\\)", "");
value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
value = value.replaceAll("script", "");
return value;
}
}
===============================================================
추가 해야 할 class 2
package com.incross.util;
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 CrossScriptingFilter implements Filter {
public FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void destroy() {
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(new RequestWrapper((HttpServletRequest) request), response);
}
}
================================================================
web.xml 에 추가 해야 할 사항
<filter>
<filter-name>XSS</filter-name>
<filter-class>com.incross.util.CrossScriptingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>XSS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
위의 사항들만 추가 해 주면 해결 된다.
소스 출처 사이트
(참고로 출처 사이트는 영어 입니다^^)
'JSP' 카테고리의 다른 글
[ JSP ] JSTL null , equal 관련 문법 (5) | 2012.11.14 |
---|---|
[ JSP ] CONTEXT ROOT 경로 구하기 (절대 경로) (2) | 2012.11.07 |
[ JSP ] no-cache 사용법 (0) | 2012.04.24 |
[ JSP ] JSTL Core 사용법 (0) | 2012.01.21 |
[ JSP ] Tiles 2 사용하여 화면 Frame 분리하기 (0) | 2010.11.23 |
댓글