스프링부트+jsp로 배달사이트 만들기-17 xss 방어하기

2021. 12. 9. 14:15스프링부트

사용자가 리뷰 작성 시 

<script>
alert(1);
</script>

와 같은 내용을 끼워 넣게 되면 매장입장에선 의도치 않은 스크립트가 실행되게 됩니다

네이버의 Lucy Xss filter를 사용하게 되면 이런 공격을 간단하게 막을 수 있습니다

 

Lucy Xss filter를 사용하기 위해 해당 위치에 추가합니다

pom.xml

		<!-- Lucy-xss-servlet-filter -->
		<dependency>
			<groupId>com.navercorp.lucy</groupId>
			<artifactId>lucy-xss-servlet</artifactId>
			<version>2.0.1</version>
		</dependency>

 

WebConfig 

	//Lucy Xss filter 적용	
    @Bean
    public FilterRegistrationBean<XssEscapeServletFilter> getFilterRegistrationBean(){
        FilterRegistrationBean<XssEscapeServletFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new XssEscapeServletFilter());
        registrationBean.setOrder(1);
        registrationBean.addUrlPatterns("/*");
        return registrationBean;
    }

 

src/main/resource아래에 lucy-xss-servlet-filter-rule.xml을 추가합니다

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에서 들어오는 'gParam' 파라미터는 필터링 되지 않으며 또한 'g'로 시작하는 파라미터도 필터링 되지 
			않는다. -->
		<params>
			<param name="gParam" useDefender="false" />
			<param name="g" usePrefix="true" useDefender="false" />
		</params>
	</global>
	<!-- URL 별 필터링 룰 선언 -->
</config>

 

 

이제 글 작성 시 스크립트를 끼워넣어도 텍스트 그대로 출력 되는걸 볼 수 있습니다