본문 바로가기

보안/시큐어코딩

[시큐어코딩실습] lucy-xss Filter 사용하기 예제

Lucy-XSS Filter는 악의적인 XSS 코드의 위험으로부터 웹 애플리케이션을 보호하는 기능을 화이트리스트(white list) 설정 방식으로 구현한 네이버에서 제작 무표 배포하는 자바 기반의 필터 라이브러리 이다.


블랙리스트를 사용하는 기존 필터보다 안전하게 웹서비스를 제공할 수 있다.


입력 파라미터로 전달되는 데이터의 경우 XSS 코드를 포함하고 있는지 판단하기 어렵기 때문에 Lucy XSS Filter를 사용하여 필터링 하기 어렵다. Lucy-XSS Filter는 JSP 나 action 등 출력 부분을 담당하는 로직에서 사용할 것을 권장한다.


[STEP1] 먼저 Lucy-XSS Filter 라이브러리와 설정 파일을 다운로드한다.

              http://dev.naver.com/projects/lucy-xss/download


lucy-xss-1.1.2.jar    <-- /WEB-INF/lib/ 폴더에 복사한다.

lucy-xss-superset.xml    <-- /src 폴더에 복사한다.



[STEP2]  lucy-xss.xml 파일을 작성한다. 

              Filter 인스턴스를 생성할 때 설정파일명을 지정하지 않으면 디폴트로

              lucy-xss.xml 파일을 읽어서 사용한다.

<config xmlns="http://www.nhncorp.com/lucy-xss" 

                         extends="lucy-xss-superset.xml">

</config>

              


[STEP3] write-url.xml 파일을 생성한다.

             이 파일이 없거나, 이 파일에 기술되지 않은 모든 리소스는 필터대상이 된다.

             

[STEP4] 출력을 담당하는 소스부분에서 Filter를 적용해 본다.

             

             /WebContent/labs/xss_test.jsp 파일수정

   <%@ page  import="com.nhncorp.lucy.security.xss.*" %> 

            

   String data=request.getParameter("data");

   System.out.println("data: "+data);

   XssFilter filter = XssFilter.getInstance("lucy-xss-superset.xml");

   String clean=filter.doFilter(data);    

   System.out.println(clean);

   out.println(clean); 

          


[STEP5]  입력화면에서 다음과 같은 문자열을 입력해서 필터링이 되는지 확인해 본다. 

      

    http://192.168.x.x./openeg/labs/test.jsp 페이지 요청

     <script>alert("XSS");</script>

     <sscriptcript>alert("XSS");</sscriptcript>

     <embed autostart="true"></embed>

     <h1>hello</hello>