상세 컨텐츠

본문 제목

JSP/SERVELT HTML Character Entity 특수문자 치환 StringEscapeUtils & 처리

programing/JAVA&JSP&SERVLET&SPRING

by ZelKun 2019. 11. 30. 21:51

본문

반응형

게시판쪽에 특수문자가 그대로 노출되는건이 있어 확인해보니

servlet 으로 파라미터가 넘어가면서 html entity가 encode 되어 넘어가 DB에 저장되고 있었다

한마디로 '(' 문자가 ( 인데 두번이다 encode 되서 ( 으로

 

이를 브라우져에서 해석하니 ( 로 나올수밖에..

화면단에서 치환해도 되긴 하지만 브라우져에서 하기보단 서버에서 처리하는게 브라우져단에서의 부하를 줄이는 일이니 서버에서 넘겨주자

참고: [programing/jQuery&HTML5] - jQuery HTML Character Entity 특수문자 치환

 

꽤 오래되긴 했지만 이전에는 replace 혹은 replaceAll 을 사용해서 개별 치환처리를 했던 시절이 있었는데

대게 XSS 공격 방지용이긴 하지만

commons-lang.jar 를 추가하고 StringEscapeUtils 를 사용하면 간단하다

import org.apache.commons.lang.StringEscapeUtils; 

//decode -> encode 
StringEscapeUtils.unescapeHtml("(");
=> (

//encode -> decode 
StringEscapeUtils.escapeHtml("<");
=> &#40;

 

다만 3버전 부터는 패키지명이 바꼈다

org.apache.commons.lang3.StringEscapeUtils;

import org.apache.commons.lang3.StringEscapeUtils;

public class EscapeHtml {
	private static Logger log = Logger.getLogger(EscapeHtml.class);

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str = "<html>한글</html>";

		//decode -> encode
		str = StringEscapeUtils.escapeHtml3(str);
		System.out.println(str);

		//encode -> decode
		str = StringEscapeUtils.unescapeHtml3(str);
		System.out.println(str);
		
		System.exit(0);
	}

}

이걸 이용해서 getter/setter 에 넣어주면 간단하다

 

물론 하나하나 하려면 어려우니 filter를 이용하면 편하겠지만 모든 파라미터를 감시(?) 하는꼴이라

추천하진 않는다

 

문자열에 &amp; 이 있는경우만 필터를 타게해도 되긴하겠지만 역시나 권하진 않는데

어짜피 특수문자가 들어갈만한 항목이 많지도 않을테니 말이다

반응형

관련글 더보기

댓글 영역