본문 바로가기
Java/Servlet & JSP

JSP) XSS 공격 대비 - escape 처리

by 박채니 2022. 7. 3.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


만일 사용자가 아래와 같은 내용을 작성하고 등록한다면,

아래와 같이 style 태그가 적용되어 color가 red로 변경 되어 있는 것을 확인할 수 있습니다.

 

script 태그도 마찬가지로 script 태그로 받아들여서 alert가 실행되는 것을 확인할 수 있습니다.

 

이를 방지하기 위해 escaping 처리를 해줘야 합니다.


XSS 공격대비 (Cross-site Scripting)

 

Controller

MemberViewServlet

// XSS 공격대비 (Cross-site Scripting)
board.setContent(HelloMvcUtils.escapeXml(board.getContent()));
board.setTitle(HelloMvcUtils.escapeXml(board.getTitle()));

 

HelloMvcUtils

escapeXml()

public static String escapeXml(String str) {
    return str.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
}

escaping 처리를 했기 때문에 문자 그대로의 "<", ">"로 받아들여서 더이상 style태그 혹은 script태그가 적용되지 않는 것을 확인할 수 있습니다.

 

boardList.jsp

<tr>
    <td><%= board.getNo() %></td>
    <td>
        <a href="<%= request.getContextPath()%>/board/boardView?no=<%=board.getNo() %>"><%= HelloMvcUtils.escapeXml(board.getTitle()) %></a>
    </td>
    <td><%= board.getWriter() %></td>
    <td><%= new SimpleDateFormat("yyyy-MM-dd HH:mm").format(board.getRegDate()) %></td>
    <td>
        <% if(boardExt.getAttachCount() > 0) { %>
            <img src="<%=request.getContextPath() %>/images/file.png" alt="" width="16px"/>
        <% } %>
    </td>
    <td><%= board.getReadCount() %></td>
</tr>

게시글 목록 페이지에서도 escaping 처리!