반응형

0. XSS(Cross Site Scripting) 란?


해커가 사용자의 PC를 공격하는 기법으로, Server Side에서 

Client Side로 전송하는 Java Script등에 해커의 코드를 심어놓고

사용자의 Browser에서 실행하도록 하는 기법이다. 


사용자가 사용하는 Page를 프록시 우회등의 방법으로 신호를 가로채고

Server에 Script를 저장하는 등의 방법으로 공격이 가능하다.


좀 아주 단순하게 말하면, Server Side에서 Client로 부터 받은 값 중에서

Script 태그 부분을 HTML Tag로 강제 치환하는 방식으로 해결이 가능하다.



구글링을 통해서 방법들을 모색하자면, 크게 3가지 방법이 있다.


 하나. Spring Interceptor

 둘. Spring Filter

 셋. Spring Message Convertor


이 중, 무엇이 올고 그른지는 잘 모르겠다만, 각 사이트에서 적용 가능한

방법이 가장 좋지 않을까.


 가장 중요한 원리는 스프링 인터셉터건, 필터건, 메세지 컨버터건간에

 Script 태그를 html code tag로 어디서 치환하냐는 것이다.

 그리고 그 치환 로직이 어디에 위치하냐의 차이일 뿐이다.


 

아래 내가 정리한 내용보다 좋은 링크(http://blog.naver.com/PostView.nhn?blogId=platinasnow&logNo=220035316135)






방법 1. Spring Interceptor 를 방어

1.1. Spring Interceptor란?

 Controller에 Handler를 들어가기 전과

 Handler가 끝난 후, 또는 ExceptionResolver가 발생 후 처리 되는 기능이다.


 쉽게 발해서 Controller의 전처리 / 후처리를 담당하는 기능이다.


 보통은 XSS외에도 Login Session 체크, 프록시 우회여부 차단등을 처리한다.

 Controller 전 / 후 처리를 공통으로 처리하기에 요긴하다.


 Servlet 에서 실행 되는 스프링 기술이다.



1.2. Spring Interceptor 사용 시

 - Java

 DeviceResolverHandlerInterceptor를 Extends 한 CustomInterceptor를 생성한다.

  

 preHandle() 메소드 => 전처리 기능

 postHandle() 메소드 => 후처리 기능


 - servlet.xml 에 추가


<mvc:interceptors>

 <mvc:interceptor>

  <mvc:mapping path="/**" />

<beans:bean class="커스텀 자바 클래스 맵핑" />

  </mvc:interceptor>

</mvc:interceptors>


 - 관련 해결 Source Link

  http://tyboss.tistory.com/entry/Java-XSS-%EB%B0%A9%EC%A7%80

  





방법 2) Servlet Filter 를 이용한 XSS 방어

2.1. Servlet Filter 란?

 Servlet Filter는 모든 HTTP Request / Response에 대한 내용을 필터링하는 기능을

 수행한다. 위에 서술한 인터셉터 보다 먼저 실행된다. 

 쉽게 말하면 J2EE 상의 Servlet 에서 HTTP 전 / 후처리 기능으로 볼 수 있다.


 Interceptor 보다 직접적으로 http 헤더와 전문에 대해서 접근 및 변환이 용이하다.


 filter chain의 doFilter를 사용 전이 전처리

 사용 후가 후처리가 된다.

 


2.2. Spring Filter 사용

 네이버 공개소스인 Lucy XSS를 사용하여 주로 처리하는 방법이 유명하다.

 다만, 이 경우는 Controller 에서 RequestBody를 사용하는 경우는 방어가 불가능하다.

 이 때, Filter를 확장 사용하는 CustomFilter 를 이용하여 처리하는 경우가 일반적이다.

 

 즉, 들어 올때 방어하는 방법으로 Request Wrapper를 Custom 처리하여 사용한다.

 web.xml에 서술 하고, Filter 를 확장하여 사용한다.


 예제 : http://lahuman.jabsiri.co.kr/155






 방법 3) Message Converter를 이용한 XSS 방어

  3.1. Message Converter 란?

   HTTP Request 또는 Response 하는 내용 중 Body 부분을 어떠한 방식으로 주고 

  받을 것인가에 대한 기능을 정의하는 부분이다. 

   예를 들어, JSON을 사용할 때는 Jackson 라이브러리를 사용하는게 대표적이다.



  3.2. Message Converter 사용

   Req / Res Body의 데이터를 Converting 할 때 Script 태그를 HTML Code 태그로

   치환하는 과정이다.


  예제 : http://homoefficio.github.io/2016/11/21/Spring%EC%97%90%EC%84%9C-JSON%EC%97%90-XSS-%EB%B0%A9%EC%A7%80-%EC%B2%98%EB%A6%AC-%ED%95%98%EA%B8%B0/

반응형

WRITTEN BY
데르벨준

,