요즘 제가 프로젝트를 하나 진행하고 있는데요.
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>
결론으로 말씀드리자만 위의 것만 설정하시면 왠만한것들은 다 방어가 가능합니다.
하지만 완벽한 것은 없으니 많은 단위테스트가 필요합니다. ^^
JAVA : split 함수 (1) | 2024.11.01 |
---|---|
Java에서 equals와 equalsIgnoreCase의 차이 (0) | 2024.09.24 |
Base64 인코딩된 이미지의 크기 구하기 (0) | 2024.06.27 |
Jasypt 를 이용한 암호화 하기 (1) | 2024.06.10 |
[Egov Framework] 전자정부프레임워크 고질적인 문제해결 (infinity redirection) (0) | 2023.10.19 |