반응형
https://junhyunny.github.io/information/security/spring-mvc/stored-cross-site-scripting/
[ 문제점 ]
게시글 작성 기능 이용 시 전달되는 파라미터 내 스크립트를 삽입할 경우 이용자 입력 값에 대한 서버 측 필터링 미흡으로 Stored XSS 공격이 가능함.
[ 방안 ]
1. 게시글 등록 기능 이용 시 전달되는 파라미터에 대한 검증이 미흡하여 일부 스크립트의 삽입이 가능하였으므로 해당 파라미터에 대한 입력 값 검증이 강화되어야 함.
2. 게시글 요청 및 등록 시 가급적 HTML이나 자바 스크립트 작성에 사용되는 키워드 및 특수문자 사용을 제한할 것을 권고함.
우선
기존에 적용된 lucy 를 점검해줌
https://hailey0.tistory.com/39
lucy-xss-default-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="p"/>
<element name="a" />
<element name="abbr"/>
<element name="acronym"/>
<element name="adress"/>
<element name="applet"/>
<element name="area"/>
<element name="b"/>
<element name="base"/>
<element name="basefont"/>
<element name="bdo"/>
<element name="big"/>
<element name="blockquote"/>
<element name="body"/>
<element name="br"/>
<element name="button"/>
<element name="caption"/>
<element name="center"/>
<element name="cite"/>
<element name="code"/>
<element name="col"/>
<element name="colgroup"/>
<element name="dd"/>
<element name="del"/>
<element name="dfn"/>
<element name="dir"/>
<element name="div"/>
<element name="dl"/>
<element name="dt"/>
<element name="em"/>
<element name="embed"/>
<element name="fieldset"/>
<element name="font"/>
<element name="form"/>
<element name="frame"/>
<element name="frameset"/>
<element name="h1"/>
<element name="h2"/>
<element name="h3"/>
<element name="h4"/>
<element name="h5"/>
<element name="h6"/>
<element name="head"/>
<element name="hr"/>
<element name="html"/>
<element name="i"/>
<element name="iframe"/>
<element name="img"/>
<element name="input"/>
<element name="ins"/>
<element name="isindex"/>
<element name="kbd"/>
<element name="label"/>
<element name="legend"/>
<element name="li"/>
<element name="link"/>
<element name="map"/>
<element name="marquee"/>
<element name="menu"/>
<element name="meta"/>
<element name="nobr"/>
<element name="noframes"/>
<element name="noscript"/>
<element name="object"/>
<element name="ol"/>
<element name="optgroup"/>
<element name="option"/>
<element name="p"/>
<element name="param"/>
<element name="pre"/>
<element name="q"/>
<element name="rt"/>
<element name="ruby"/>
<element name="s"/>
<element name="samp"/>
<!-- <element name="script"/> -->
<element name="select"/>
<element name="small"/>
<element name="span"/>
<element name="strike"/>
<element name="strong"/>
<element name="style"/>
<element name="sub"/>
<element name="sup"/>
<element name="table"/>
<element name="tbody"/>
<element name="td"/>
<element name="textarea"/>
<element name="tfoot"/>
<element name="th"/>
<element name="thead"/>
<element name="title"/>
<element name="tr"/>
<element name="tt"/>
<element name="u"/>
<element name="ul"/>
<element name="var"/>
<element name="wbr"/>
<element name="xml"/>
<element name="xmp"/>
<!-- HTML5 added at 2012.04.10 Start-->
<element name="article"/>
<element name="aside"/>
<element name="audio"/>
<element name="bdi"/>
<element name="canvas"/>
<element name="command"/>
<element name="datalist"/>
<element name="details"/>
<element name="figcaption"/>
<element name="figure"/>
<element name="footer"/>
<element name="header"/>
<element name="hgroup"/>
<element name="keygen"/>
<element name="mark"/>
<element name="meter"/>
<element name="nav"/>
<element name="output"/>
<element name="progress"/>
<element name="rp"/>
<element name="section"/>
<element name="source"/>
<element name="summary"/>
<element name="time"/>
<element name="track"/>
<element name="video"/>
<!-- HTML5 added at 2012.04.10 End-->
<!-- IE핵 처리를 위해 추가-->
<element name="IEHackExtension" disable="ture" >
</element>
</elementRule>
<attributeRule>
<attribute name="src">
<allowedPattern><![CDATA[['"]?\s*http://.*]]></allowedPattern>
</attribute>
<attribute name="href">
<notAllowedPattern><![CDATA[(?i:script)]]></notAllowedPattern>
<notAllowedPattern><![CDATA[(?i:\.css)]]></notAllowedPattern>
</attribute>
<attribute name="style" disable="false" exceptionTagList="a"/> <!-- 2013.12.24 수정 : A 태그는 style 속성에 의한 우회 공격 이슈로 style 속성을 배제힌다. -->
</attributeRule>
</config>
해당 코드를 통해서 부족한 부분 보충하였으나 적용 안됨....
pom.xml
pom.xml
<dependency>
<groupId>com.navercorp.lucy</groupId>
<artifactId>lucy-xss</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>com.navercorp.lucy</groupId>
<artifactId>lucy-xss-servlet</artifactId>
<version>2.0.0</version>
</dependency>
controller
게시글 view api에
import com.nhncorp.lucy.security.xss.LucyXssFilter;
import com.nhncorp.lucy.security.xss.XssFilter;
적용해줌
LucyXssFilter filter = XssFilter.getInstance();
String clean = filter.doFilter(result.get("content").toString());
result.replace("content", clean);
controller 들어온 content 값을 filter를 통해 문제가 될만한 코드를 정리해주고
깨끗해진 코드를 대체하여 view에 전송
반응형
'SW Dev Portfolio' 카테고리의 다른 글
웹 컴포넌트의 새로운 세계: 웹 개발의 패러다임 변화 (0) | 2023.09.08 |
---|---|
‘애자일’ 잘 하는 방법(EoA) (0) | 2023.09.04 |
HEROKU 배포 하는 방법 (0) | 2023.08.15 |
라우터 , 게이트웨이의 차이점과 하드웨어적 방화벽 강화 방법 (0) | 2023.08.03 |
장애인 개발원 BF 개발 1일차 (0) | 2023.05.22 |
JAVA SPRING - 정부 프레임 워크 JQuery 문법으로 DB 연동하여 SelctBox에 Data 바인딩 하기 (0) | 2023.05.22 |