JSP/SERVELT HTML Character Entity 특수문자 치환 StringEscapeUtils & 처리
게시판쪽에 특수문자가 그대로 노출되는건이 있어 확인해보니
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("<");
=> (
다만 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를 이용하면 편하겠지만 모든 파라미터를 감시(?) 하는꼴이라
추천하진 않는다
문자열에 & 이 있는경우만 필터를 타게해도 되긴하겠지만 역시나 권하진 않는데
어짜피 특수문자가 들어갈만한 항목이 많지도 않을테니 말이다
JAVA 자바 List, ArrayList, array 리스트, 배열 값 확인하기 (0) | 2021.01.20 |
---|---|
JAVA 자바 Map, HashMap, EgovMap 값 확인하기 (0) | 2021.01.19 |
[JSP/SERVLET/SPRING] 다운로드 한글파일명 처리 (0) | 2019.08.24 |
JSTL문법 <c:forEach> c:tag를 이용한 리스트 출력 (0) | 2018.01.01 |
JSTL문법 <c:forTokens> c:tag 를 이용한 리스트 정렬기능 구현 (0) | 2018.01.01 |
댓글 영역