-
XSS 스크립팅 방지 xml 적용Web Programming 2023. 2. 3. 23:08728x90반응형
게시판에 XSS 스크립팅 공격 방지를 위해 naver xss filter 적용하였다.
1, pom.xml
<dependency> <groupId>com.navercorp.lucy</groupId> <artifactId>lucy-xss-servlet</artifactId> <version>2.0.0</version> </dependency>
2, web.xml
<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> web.xml 에 적용했을때 에러나는 경우는 filter 순서가 안맞기 때문에 나 같은 경우는 encodingFilter 밑에 적용시켰음.
3, xml 파일 생성
밑에
lucy-xss-servlet-filter-rule.xml 과 lucy-xss-superset-sax.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> <params> <param name="globalParameter" useDefender="false" /> <param name="globalPrefixParameter" usePrefix="true" useDefender="false" /> </params> </global> <!-- global 필터링 룰 선언 --> <!-- <global> 모든 url에서 들어오는 'gParam' 파라미터는 필터링 되지 않으며 또한 'g'로 시작하는 파라미터도 필터링 되지 않는다. <params> <param name="gParam" useDefender="false" /> <param name="g" usePrefix="true" useDefender="false" /> </params> </global> --> <!-- URL 별 필터링 룰 선언 --> <url-rule-set> <!-- url disable이 true이면 지정한 url 내의 모든 파라미터는 필터링되지 않는다.(기본값은 false) --> <!-- <url-rule> <url disable="true">/test.do</url> </url-rule> --> <!-- 1. '/xss/globalFilter.do' 내의 nParam은 필터링 되지 않는다. 2. '/xss/globalFilter.do' 내의 'n'으로 시작하는 파라미터는 필터링 되지 않는다.(usePrefix=true) --> <!-- <url-rule> <url>/xss/globalFilter.do</url> <params> <param name="nParam" useDefender="false" /> <param name="n" usePrefix="true" useDefender="false" /> </params> </url-rule> --> </url-rule-set> </config>
lucy-xss-superset-sax.xml
<?xml version="1.0" encoding="UTF-8"?> <config xmlns="http://www.nhncorp.com/lucy-xss" extends="lucy-xss-default-sax.xml"> <elementRule> <element name="body" disable="true" /> <element name="embed" disable="true" /> <element name="iframe" disable="true" /> <element name="meta" disable="true" /> <element name="object" disable="true" /> <element name="script" disable="true" /> <element name="style" disable="true" /> <element name="link" disable="true" /> <element name="base" disable="true" /> </elementRule> <attributeRule> <attribute name="data" base64Decoding="true"> <notAllowedPattern><![CDATA[(?i:s\\*c\\*r\\*i\\*p\\*t\\*:)]]></notAllowedPattern> <notAllowedPattern><![CDATA[(?i:d\\*a\\*t\\*a\\*:)]]></notAllowedPattern> <notAllowedPattern><![CDATA[&[#\\%x]+[\da-fA-F][\da-fA-F]+]]></notAllowedPattern> </attribute> <attribute name="src" base64Decoding="true"> <notAllowedPattern><![CDATA[(?i:s\\*c\\*r\\*i\\*p\\*t\\*:)]]></notAllowedPattern> <notAllowedPattern><![CDATA[(?i:d\\*a\\*t\\*a\\*:)]]></notAllowedPattern> <notAllowedPattern><![CDATA[&[#\\%x]+[\da-fA-F][\da-fA-F]+]]></notAllowedPattern> </attribute> <attribute name="style"> <notAllowedPattern><![CDATA[(?i:j\\*a\\*v\\*a\\*s\\*c\\*r\\*i\\*p\\*t\\*:)]]></notAllowedPattern> <notAllowedPattern><![CDATA[(?i:e\\*x\\*p\\*r\\*e\\*s\\*s\\*i\\*o\\*n)]]></notAllowedPattern> <notAllowedPattern><![CDATA[&[#\\%x]+[\da-fA-F][\da-fA-F]+]]></notAllowedPattern> </attribute> <attribute name="href"> <notAllowedPattern><![CDATA[(?i:j\\*a\\*v\\*a\\*s\\*c\\*r\\*i\\*p\\*t\\*:)]]></notAllowedPattern> </attribute> </attributeRule> </config>
게시판 내용에 <script>alert("야!!")</script> 입력 시 alert 창이 안뜨고 단순 문자열로 나타남을 확인 할 수 있다.
참고사이트
Spring XSS 방지를 위한 lucy 필터(com.navercorp.lucy) (tistory.com)
GitHub - naver/lucy-xss-servlet-filter
XSS - Spring lucy servlet filter 적용하기 :: 개발 흔적 남기기 (tistory.com)
728x90반응형'Web Programming' 카테고리의 다른 글
input 투명글 보이게 placeholder (0) 2023.02.03 jsp:include (0) 2023.02.03 jsp 화면에 자바 조건으로 콘솔 찍기 (0) 2023.02.03 JDBC LIKE '%'||?||'%' (0) 2023.02.03 html 버튼 클릭시 opener 못 넘김 오류 (0) 2023.02.03