hoony's web study

728x90
반응형


요즘 제가 프로젝트를 하나 진행하고 있는데요. 
Java 웹 애플리케이션에서 자주 발생하는 보안 취약점인 크로스 사이트 스크립팅(XSS)을 방지하는 데 도움을 주는 Lucy XSS Servlet에 대해 알아보겠습니다.

 주요특징

1. 설정 기반 필터링: XML 설정 파일을 통해 필터링 규칙을 쉽게 정의할 수 있습니다.
2. 다양한 문자 인코딩 지원: UTF-8, EUC-KR 등 다양한 문자 인코딩을 지원합니다.
3. 성능 최적화: 빠른 처리 속도를 위해 최적화되어 있습니다.
4. 커스터마이징 가능: 필요에 따라 필터링 규칙을 확장하거나 수정할 수 있습니다

사용방법

1. Maven 의존성 추가 

<!-- https://mvnrepository.com/artifact/com.navercorp.lucy/lucy-xss-servlet -->
        <dependency>
            <groupId>com.navercorp.lucy</groupId>
            <artifactId>lucy-xss-servlet</artifactId>
            <version>2.0.1</version>
        </dependency>

위의 예시처럼 Pom.xml 에 의존성을 추가합니다. 

2. WebMvcConfigurer와 관련된 class 에 아래를 추가합니다. 

 @Bean
    public FilterRegistrationBean<XssEscapeServletFilter> getFilterRegistrationBean(){
        FilterRegistrationBean <XssEscapeServletFilter> xssRegistrationBean = new FilterRegistrationBean<>();
        xssRegistrationBean.setFilter(new XssEscapeServletFilter());
        xssRegistrationBean.setOrder(Ordered.LOWEST_PRECEDENCE);
        xssRegistrationBean.addUrlPatterns("/*");
        return xssRegistrationBean;
    }

3. src/main/resources 경로에 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>
    </defenders>
    <!-- default defender 선언, 별다른 defender 선언이 없으면 default defender를 사용해 필터링 한다. -->
    <default>
        <defender>xssPreventerDefender</defender>
    </default>

필요한 만큼만 적용을 하시면 됩니다. 

4. 예외파라미터 설정 

<!-- global 필터링 룰 선언 -->
    <global>
        <!-- 모든 url에서 들어오는 globalParameter 파라메터는 필터링 되지 않으며 
                또한 globalPrefixParameter로 시작하는 파라메터도 필터링 되지 않는다. -->
        <params>
            <param name="globalParameter" useDefender="false" />
            <param name="globalPrefixParameter" usePrefix="true" useDefender="false" />
        </params>
    </global>

 

결론

결론으로 말씀드리자만 위의 것만 설정하시면 왠만한것들은 다 방어가 가능합니다. 
하지만 완벽한 것은 없으니 많은 단위테스트가 필요합니다. ^^

 

728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading