게시판을 운영하다 보면,

사용자가 글 내용을 입력할 때 텍스트박스(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>를 &lt;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", "&lt;script");
    }

boardVO.java






+ Recent posts