[재질문]ckeditor 입력 글 수정 화면에서 html소스가 그대로 보이는 이유
- 작성자 :
- 김*화
- 작성일 :
- 2019-08-26 10:10:27
- 조회수 :
- 5,959
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
[1차 질문]
첨부 파일과 같이
[개인정보보호정책 관리 상세보기] 메뉴의 수정 화면에서
ckeditor 글 html 내용이 어찌하여 그대로 html 소스로 나오는가요?
[답변]
크로스 사이트 스크립트(XSS)를 방지하기위해
HTMLTagFilter라는 필터가 적용되어 있습니다.
공통컴포넌트 v3.8을 사용하신다면
다음 파일에 정의가 되어 있습니다.
src/main/java/egovframework/com/cmm/config/EgovWebApplicationInitializer.java
이에 2차 질문
//-------------------------------------------------------------
// HTMLTagFilter의 경우는 파라미터에 대하여 XSS 오류 방지를 위한 변환을 처리합니다.
//-------------------------------------------------------------
// HTMLTagFIlter의 경우는 JSP의 <c:out /> 등을 사용하지 못하는 특수한 상황에서 사용하시면 됩니다.
// (<c:out />의 경우 뷰단에서 데이터 출력시 XSS 방지 처리가 됨)
FilterRegistration.Dynamic htmlTagFilter = servletContext.addFilter("htmlTagFilter", new HTMLTagFilter());
htmlTagFilter.addMappingForUrlPatterns(null, true, "*.do");
이 설정을 주석 및 false 로 하여 구동을 해도 동일하게 에디터 textarea에 html소스가 그대로 나타나서요.
다시한번 자세한 답변 부탁드립니다.
첨부 파일과 같이
[개인정보보호정책 관리 상세보기] 메뉴의 수정 화면에서
ckeditor 글 html 내용이 어찌하여 그대로 html 소스로 나오는가요?
[답변]
크로스 사이트 스크립트(XSS)를 방지하기위해
HTMLTagFilter라는 필터가 적용되어 있습니다.
공통컴포넌트 v3.8을 사용하신다면
다음 파일에 정의가 되어 있습니다.
src/main/java/egovframework/com/cmm/config/EgovWebApplicationInitializer.java
이에 2차 질문
//-------------------------------------------------------------
// HTMLTagFilter의 경우는 파라미터에 대하여 XSS 오류 방지를 위한 변환을 처리합니다.
//-------------------------------------------------------------
// HTMLTagFIlter의 경우는 JSP의 <c:out /> 등을 사용하지 못하는 특수한 상황에서 사용하시면 됩니다.
// (<c:out />의 경우 뷰단에서 데이터 출력시 XSS 방지 처리가 됨)
FilterRegistration.Dynamic htmlTagFilter = servletContext.addFilter("htmlTagFilter", new HTMLTagFilter());
htmlTagFilter.addMappingForUrlPatterns(null, true, "*.do");
이 설정을 주석 및 false 로 하여 구동을 해도 동일하게 에디터 textarea에 html소스가 그대로 나타나서요.
다시한번 자세한 답변 부탁드립니다.
첨부파일
A
안녕하세요.
표준프레임워크 센터입니다.
true/false 옵션으로는
원하시는 설정이 되지 않을듯 합니다.
문의하신 내용과 같이 특정 메뉴에서 XSS 기능을 사용하지 않게 하기 위해선
태그필터에서 해당 메뉴의 URL에 대해서 예외처리하시는 방법이 있습니다.
HTMLTagFilter 에 아래처럼 코드를 추가하시면 됩니다.
public void doFilter() {
HttpServletRequest req = (HttpServletRequest) request;
String uri = req.getRequestURI().toString().trim();
String urlList = "/cop/bbs"; // 예외처리할 URL - 여러 개일 경우 별도 처리 필요
boolean allowedRequest = false;
// 현재 uri 와 비교
if (uri.startsWith(urlList)) {
allowedRequest = true;
}
if(!allowedRequest) {
chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response); // 필터링이 필요한 URI일 경우 요청값 그대로 처리
} else {
chain.doFilter(req, (HttpServletResponse) res); // 필터링을 하지 않을 경우 요청값 변경
}
}
다만, 해당 URL 에 대해선 기존의 XSS 필터가 적용되지 않으므로
보안상 문제가 있을 수 있으니 충분히 검토하신 후 사용하시기 바랍니다.
감사합니다.
표준프레임워크 센터입니다.
true/false 옵션으로는
원하시는 설정이 되지 않을듯 합니다.
문의하신 내용과 같이 특정 메뉴에서 XSS 기능을 사용하지 않게 하기 위해선
태그필터에서 해당 메뉴의 URL에 대해서 예외처리하시는 방법이 있습니다.
HTMLTagFilter 에 아래처럼 코드를 추가하시면 됩니다.
public void doFilter() {
HttpServletRequest req = (HttpServletRequest) request;
String uri = req.getRequestURI().toString().trim();
String urlList = "/cop/bbs"; // 예외처리할 URL - 여러 개일 경우 별도 처리 필요
boolean allowedRequest = false;
// 현재 uri 와 비교
if (uri.startsWith(urlList)) {
allowedRequest = true;
}
if(!allowedRequest) {
chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response); // 필터링이 필요한 URI일 경우 요청값 그대로 처리
} else {
chain.doFilter(req, (HttpServletResponse) res); // 필터링을 하지 않을 경우 요청값 변경
}
}
다만, 해당 URL 에 대해선 기존의 XSS 필터가 적용되지 않으므로
보안상 문제가 있을 수 있으니 충분히 검토하신 후 사용하시기 바랍니다.
감사합니다.