본문 바로가기

개인공부

[XSS] 크로스사이트 스크립팅 공격 예방

네이버에서 개발되었던 lucy-xss-filter 라는 라이브러리 사용

  • 장점
    1. XML 설정 만으로 XSS 방어가 가능해짐
    2. 비지니스 레이어의 코드 수정이 발생하지 않음
    3. 개발자가 XSS 방어를 신경 쓰지 않아도 됨
    4. XSS 방어가 누락되지 않음
    5. 설정 파일 하나로 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