본문으로 바로가기
반응형


웹 보안의 시작이라고도 할 수 있는 cross site scripting(xss)에 대한 처리를 할 수 있는 방법은 다양하다.

spring framework를 사용한다면 그 방법들 중에서 filter를 사용해 간단하게 처리하는 것이 보편적이다.



xss가 무엇인지 모르시는 분은 "http://www.leafcats.com/42" 를,

filter에 대한 기본이 궁금하신 분은 "http://www.leafcats.com/39" 를 참고하시면 좋겠다.



크로스 사이트 스크립팅을 방지할 수 있는 본인만의 wrapper 유틸을 작성해 설정해둔 필터에 적용시키면 된다. 하지만 스스로가 정말 능력있는 보안 개발자가 아닌이상 직접 작성한 wrapper는 헛점이 있을 가능성이 크다. 

불필요한 곳에 xss 방어코드가 적용되어 성능에 저하를 가져오거나, 정작 필요한 곳에 방어코드를 누락되어 있을 수 있다. 


구글링을 해 보면 있는 여러 wrapper들이 있지만, 무료로 배포되고 있는 xss 처리 필터들 중 가장 철저하고 디테일한 옵션을 제공하는 것이 있다. 

springcamp 2015에서 naver labs에서 발표하고 github를 통해 무료로 배포하고있는 LUCYXSS 라는 라이브러리이다.



1. dependency 설정


1
2
3
4
5
<dependency>
    <groupId>com.navercorp.lucy</groupId>
    <artifactId>lucy-xss-servlet</artifactId>
    <version>2.0.0</version>
</dependency>
cs

maven을 사용중이라면 pom.xml에 위 디펜던시를 추가한다.



2. configuration 클래스에 필터 설정을 been으로 등록한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter{
    
    /*
     * lucy-xss-filter
     *  
     * */
    @Bean
    public FilterRegistrationBean getFilterRegistrationBean(){
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new XssEscapeServletFilter());
        registrationBean.setOrder(1);
        registrationBean.addUrlPatterns("*.do""*.go");    //filter를 거칠 url patterns
        return registrationBean;
    }
}
cs

꼭 이 라이브러리가 아니더라도, spring boot에서 필터 등록을 위해서 사용하는 과정이다. 나는 컨트롤러에서 사용하는 urlPattern이 .do와 .go 이기 때문에 이 패턴들에 필터를 적용하였다.



3. resources 폴더에 xml 설정 파일인 lucy-xss-servlet-filter-rul.xml을 추가한다.


https://github.com/naver/lucy-xss-servlet-filter

위 네이버 github의 lucy-xss-servlet-filter에 접속해 보면 가이드와 xml 설정 파일에 대한 설명, 소스를 받을 수 있다.

xml설정을 통해서 특정 url에 대한 필터링을 제외하거나, 설정한 prefix로 시작하는 파라메터에 대한 필터링을 제외할 수도 있다.


이렇게 설정한 뒤, 서버를 올리고 스크립트 테스팅을 해 보면 정상적으로 적용된 것을 확인 할 수 있다.




github overview에 나와있는 LUCYXSS의 장단점은 이렇다.


  • XML 설정 만으로 XSS 방어가 가능하다.
  • 비지니스 레이어의 코드 수정이 발생하지 않는다.
  • 개발자가 XSS 방어를 신경 쓰지 않아도 된다.
  • XSS 방어가 누락되지 않는다.
  • 설정 파일 하나로 XSS 방어절차가 파악 된다.
  • 파라메터명에 대해 관리가 필요해진다.
  • 일괄 적용되어 영향 받기 때문에 정확한 필터링 룰 정의가 중요하다.



본인이 개발하려는 웹 어플리케이션의 주요 비지니스 로직은 스스로 설계하고 코딩하는 것이 당연하다. 하지만, 보안이슈와 같은 방어코드들은 이미 철저한 검증을 통해 널리 사용되고 있는 오픈소스들을 사용하는 것이 더 바람직하다고 생각한다. 내 시간도 벌어줄 수 있고, 내가 짠 것보다 더 나을 것이니 말이다.




반응형

 Other Contents