ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • XSS 스크립팅 방지 xml 적용
    Web Programming 2023. 2. 3. 23:08
    728x90
    반응형

    게시판에 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
Designed by Tistory.