-
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>
추가적인 옵션, 자세한 설명은 아래 링크에서 확인하면 된다.
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