반응형

아주 오래전에 개발된 웹페이지를 맡게되어서 개발중인데, 취약점으로 엄청난 지적들이 나오고 있어서 고통을 받고 있다...

 

mybatis $문제도 문제지만 jsp에서 ${}로 데이터를 받은부분에서 XSS악성스크립트로 replace 문자열 치환을 해달라는 요청이 있어서 바꾸고 있는중인데 jstl에서 replcae사용법에 대해 알아보겠다.

 


 

 

먼저 fn 태그스크립트를 추가해준다.

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

 

기존)

<c:forEach items="${list}" var="list" varStatus="i">
<tr>
	<td>${list.no}</td>
</tr>
</c:forEach>

 

replace 처리)

<c:forEach items="${list}" var="list" varStatus="i">
<tr>
	<td>${fn:replace(fn:replace(list.no, '&lt;', ''), '&gt;', '')}</td>
</tr>
</c:forEach>

td태그 사이의 값을 보면 된다.

먼저 "<" 특수문자를 공백으로 치환후 한번더 replace하면서 ">"로 변경처리 해준다.

 

${fn:replace(대상, '대상 문자열', '변경할 문자열')}

 


 

 

fomatter와 같은 태그로 묶어서 날짜표현을 하던 데이터의 경우

 

기존)

<fmt:formatDate var="sDt" pattern="yyyy-MM-dd" value="${list.startDate}" />

 

replace 처리)

<fmt:formatDate var="sDt" pattern="yyyy-MM-dd" value="${list.startDt}" />

${fn:replace(fn:replace(sDt, '&lt;', ''), '&gt;', '')}

 

var에 먼저 패턴에 따른 형변환을 처리한 후 변수값을 이용하여 replace를 해주면 적용이 가능하다.

반응형