게시판을 운영하다 보면,
사용자가 글 내용을 입력할 때 텍스트박스(TextArea)로 입력하는 게 아니라 웹 에디터를 이용할 때가 많다.
즉, HTML 태그를 사용자가 입력하는 것이다.
하지만 현재의 코드에서는 사용자가 입력한 HTML 코드가 실행되지 않는다.
글쓰기에서 글 내용에 “<B>테스트</B>”라고 입력한 후 저장해 보자.
글 읽기에서 확인해보면 입력한 내용이 그대로 출력되는 것을 알 수 있다.
사용자가 원하는 것은 굵게 표시된 글자일 것이다.
이렇게 출력되는 것은 Spring에서 HTML 실행을 막아놨기 때문이다.
다음과 같이 출력(out) 테그에 escapeXml="false"를 넣어주면 문제가 해결된다.
<tr>
<td>내용</td>
<td><c:out value="${boardInfo.brdmemo}" escapeXml="false"/></td>
</tr>
boardRead.jsp
하지만 이렇게 처리할 경우 악의적인 사용자에 의해 잘못된 스크립트가 삽입되어 실행되는 문제가 발생할 수 있다.
예로, 글쓰기에서 새로운 게시글을 하나 만들어 글 내용에 다음과 같이 입력해 보자.
<script>
alert(“이게 실행되면 안 되는데”);
</script>
글 읽기로 확인해 보면 자바 스크립트가 실행되어 메시지 창이 나오는 것을 알 수 있다.
HTML은 실행하고 자바 스크립트는 실행하지 못하게 해야 한다.
따라서 <script>를 <script>로 바꾸어 사용자가 입력한 프로그램 코드가 실행되지 않게 만들어 주면 된다.
개발자에 따라 사용자가 입력한 내용을 DB에 저장할 때 처리하기도 하고 보여 줄 때 처리하기도 한다.
개인적 성향으로 다음과 같이 데이터를 불러와서 보여줄 때 처리하도록 했다.
public class boardVO {
private String brdno, brdtitle, brdwriter, brdmemo, brddate, brdhit, brddeleteflag;
~~ 생략 ~~
public void setBrdwriter(String brdwriter) {
this.brdwriter = brdwriter;
}
public String getBrdmemo() {
return brdmemo.replaceAll("(?i)<script", "<script");
}
boardVO.java
'Java > 게시판 3' 카테고리의 다른 글
2. 게시판 확장 II - 필수입력, 수정/저장 서비스 하나로 (2) | 2016.03.28 |
---|---|
3. 게시판 확장 II - 긴 제목을 한 줄로 표시 (1) | 2016.03.28 |
4. 게시판 확장 II - 검색 (2) | 2016.03.28 |
5. 게시판 확장 II - 페이징을 공통으로 (2) | 2016.03.20 |