네이버에서 개발되었던 lucy-xss-filter 라는 라이브러리 사용
- 장점
- XML 설정 만으로 XSS 방어가 가능해짐
- 비지니스 레이어의 코드 수정이 발생하지 않음
- 개발자가 XSS 방어를 신경 쓰지 않아도 됨
- XSS 방어가 누락되지 않음
- 설정 파일 하나로 XSS 방어절차가 파악됨
- gradle 에 추가
compile 'com.navercorp.lucy:lucy-xss-servlet:2.0.1'
- web.xml > filter mapping선언
<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>
- rule 추가는 /resources/lucy-xss-servlet-filter-rule.xml 경로에 파일생성 후 작성
아래는 기본 세팅이고 특수 정책이 있는경우 defender를 사용하여 예외처리를 할 수 있다.
global 필터링 룰의 경우 예외처리할 파라미터가 없을 시 생략한다.
<?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>
</config>
'개인공부' 카테고리의 다른 글
[Java] DTO와 VO의 차이 (0) | 2023.04.13 |
---|---|
[jsp] 해당 페이지 PDF로 다운 (0) | 2023.04.13 |
[JSTL] 시간 계산 표시 (0) | 2023.04.13 |
[Java] SHA-256 암호화 방법 (0) | 2023.04.13 |
[JSTL] Format (0) | 2023.04.13 |