ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • xss 공격 보안
    개발/개발관련 2019. 11. 18. 12:20

    1. 스크립트 공격으로 인한 보안책

    xss 보안 라이브러리가 몇개 있는데 그 중에 네이버에서 나온 xss 필터를 적용해본다. 한글화가 잘 되어있고, 많이 쓰는 라이브러리에 용이한 적용방법, xml 설정만으로 xss 방어가 가능한 점, 비지니스 코드 수정이 발생하지 않는 점 등등 장점이 많아서 적용하게 되었다.

    기존 lucy-xss-filter를 사용해도 xss 공격에 시달리고있다.

    필요한곳에 xss 방어 코드 누락, 불필요한 곳에 누락, 여기저기 방어코드가 혼재되어 유지보수 비용 증가 등 여러 문제가 발생했다.

    하지만, 현재 운영중인 사이트에 xss 적용하려면 lucy-xss-filter를 적용하는게 좋다. 서블릿 기반으로 바꾸게 된다면 입출력에 문제가 생길 수 있다. 그래서 시간적 여유가 많거나 새로 구축하는 사이트인 경우엔 서블릿 기반으로 개발 시작하는 것이 좋다.

    2. 적용 방법

    pom.xml에 아래 소스를 추가한다.

    <dependency>
        <groupId>com.navercorp.lucy</groupId>
        <artifactId>lucy-xss-servlet</artifactId>
        <version>2.0.0</version>
    </dependency>

    web.xml에 아래 소스를 추가한다.

    <!-- xssEscapeServletFilter는 CharacterEncodingFilter 뒤에 위치해야 한다. -->
    <filter>
        <filter-name>xssEscapeServletFilter</filter-name>
        <filter-class>com.navercorp.lucy.security.xss.servletfilter.XssEscapeServletFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>xssEscapeServletFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    /resource 폴더 내에 "lucy-xss-servlet-filter-rule.xml" 파일을 생성한다.

    <?xml version="1.0" encoding="UTF-8"?>
    <config xmlns="http://www.navercorp.com/lucy-xss-servlet">
       <defenders>
           <!-- XssPreventer 등록 -->
           <defender>
               <name>xssPreventerDefender</name>
               <class>com.navercorp.lucy.security.xss.servletfilter.defender.XssPreventerDefender</class>
           </defender>
    
           <!-- XssSaxFilter 등록 -->
           <defender>
               <name>xssSaxFilterDefender</name>
               <class>com.navercorp.lucy.security.xss.servletfilter.defender.XssSaxFilterDefender</class>
               <init-param>
                   <param-value>lucy-xss-sax.xml</param-value>   <!-- lucy-xss-filter의 sax용 설정파일 -->
                   <param-value>false</param-value>        <!-- 필터링된 코멘트를 남길지 여부, 성능 효율상 false 추천 -->
               </init-param>
           </defender>
    
           <!-- XssFilter 등록 -->
           <defender>
               <name>xssFilterDefender</name>
               <class>com.navercorp.lucy.security.xss.servletfilter.defender.XssFilterDefender</class>
               <init-param>
                   <param-value>lucy-xss.xml</param-value>    <!-- lucy-xss-filter의 dom용 설정파일 -->
                   <param-value>false</param-value>         <!-- 필터링된 코멘트를 남길지 여부, 성능 효율상 false 추천 -->
               </init-param>
           </defender>
       </defenders>
    
        <!-- default defender 선언, 별다른 defender 선언이 없으면 default defender를 사용해 필터링 한다. -->
        <default>
            <defender>xssPreventerDefender</defender>
        </default>
    
        <!-- global 필터링 룰 선언 -->
        <global>
            <!-- 모든 url에서 들어오는 globalParameter 파라메터는 필터링 되지 않으며 
                    또한 globalPrefixParameter로 시작하는 파라메터도 필터링 되지 않는다. -->
            <params>
                <param name="globalParameter" useDefender="false" />
                <param name="globalPrefixParameter" usePrefix="true" useDefender="false" />
            </params>
        </global>
    
        <!-- url 별 필터링 룰 선언 -->
        <url-rule-set>
    
           <!-- url disable이 true이면 지정한 url 내의 모든 파라메터는 필터링 되지 않는다. -->
           <url-rule>
               <url disable="true">/disableUrl1.do</url>
           </url-rule>
    
            <!-- url1 내의 url1Parameter는 필터링 되지 않으며 또한 url1PrefixParameter로 시작하는 파라메터도 필터링 되지 않는다. -->
            <url-rule>
                <url>/url1.do</url>
                <params>
                    <param name="url1Parameter" useDefender="false" />
                    <param name="url1PrefixParameter" usePrefix="true" useDefender="false" />
                </params>
            </url-rule>
    
            <!-- url2 내의 url2Parameter1만 필터링 되지 않으며 url2Parameter2는 xssSaxFilterDefender를 사용해 필터링 한다.  -->
            <url-rule>
                <url>/url2.do</url>
                <params>
                    <param name="url2Parameter1" useDefender="false" />
                    <param name="url2Parameter2">
                        <defender>xssSaxFilterDefender</defender>
                    </param>
                </params>
            </url-rule>
        </url-rule-set>
    </config>

    추가적인 옵션, 자세한 설명은 아래 링크에서 확인하면 된다.

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

    728x90

    '개발 > 개발관련' 카테고리의 다른 글

    자바로 ip 출력하기  (0) 2019.11.26
    자바로 메일 보내기  (0) 2019.11.19
    CORS 문제 해결  (1) 2019.11.14
    centos6 톰캣9설치  (0) 2019.10.25
    리눅스에 mysql을 설치 및 연동  (0) 2019.10.23
Designed by Tistory.