출처 : http://egloos.zum.com/nestofeagle/v/1809584
웹 페이지를 만들보면 사용자의 악의적인 공격을 많이 받게되는데
이런 것들중 가장 대표적인것이 XSS 공격이다
크로스 사이트 스크립트 라는것인데 서버로 보내는 입력값에 자바스크립트를 보내서
다른 사용자에게 자신이 만든 스크립트를 실행시켜서 사용자의 정보를 빼내는것이다
지금 당장 자신의 사이트가 XSS 를 방어하고 있는지 확인하는 방법은 간단하다
입력창 아무대서나 <script> alert("script ok"); </script> 라고 입력하고
저장한 후 상세화면으로 들어갔을때 해당 코드가 실행되는지 확인하면 간단하다
이런 문제를 해결하는데에는 많은 방법이 있지만 간단하게 Filter 추가 만으로 해결할 수 있는 방법이 있다
1. CrossScriptingFilter 필터 파일
2. RequestWrapper 필터링을 실행할 파일
3. web.xml 에서 세팅
=================================================================================
- package com.greatwebguy.filter;
- 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 void init(FilterConfig filterConfig) throws ServletException {
- this.filterConfig = filterConfig;
- }
- public void destroy() {
- this.filterConfig = null;
- }
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- chain.doFilter(new RequestWrapper((HttpServletRequest) request), response);
- }
- }
=======================================================================
- package com.greatwebguy.filter;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletRequestWrapper;
- public final class RequestWrapper extends HttpServletRequestWrapper {
- public RequestWrapper(HttpServletRequest servletRequest) {
- super(servletRequest);
- }
- if (values==null) {
- return null;
- }
- int count = values.length;
- for (int i = 0; i < count; i++) {
- encodedValues[i] = cleanXSS(values[i]);
- }
- return encodedValues;
- }
- if (value == null) {
- return null;
- }
- return cleanXSS(value);
- }
- if (value == null)
- return null;
- return cleanXSS(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;
- }
- }
===========================================================
- <filter>
- <filter-name>XSS</filter-name>
- <filter-class>com.greatwebguy.filter.CrossScriptingFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>XSS</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
필요하다면 RequestWrapper 해당 클래스 파일에서 수정이 가능하다
web.xml 에 추가할때 자신의 package 로 변경하는거 잊지 않도록 한다
PS.
블로그에 소스코드 올릴때 http://qbnz.com/highlighter/index.php 요기 이용하면 위에처럼 이쁘게 나온다
아..지금까지 삽질했다....
우측하단에 Domonstration 에 코드 넣고 언어 선택하고 Highlight 버튼 클릭!
PS 2.
이런...좌우측이 화면에 짤리네;;; 헐...복사하면 보이긴하니까 다행;;;
'JSP > Security' 카테고리의 다른 글
개인정보 보호법과 JAVA를 이용한 암호화 구현(SHA256, AES256) (0) | 2015.12.14 |
---|