From 145ad3749932994d3ebdcbdd2a0c5d406ed22054 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Wed, 9 Sep 2026 09:52:47 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A6=AC=EC=B9=98=20=ED=85=8D=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=A1=B0=EA=B1=B4=20=EC=B6=94=EA=B0=80=20-=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=ED=85=9C=ED=94=8C=EB=A6=BF=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D/=EC=88=98=EC=A0=95=20=EC=8B=9C=20XSS=20?= =?UTF-8?q?=ED=95=84=ED=84=B0=EB=A7=8C=20=EC=A0=81=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95=20-=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=20=EB=B3=80=ED=99=98=20=EA=B1=B4=EB=84=88=EB=9B=B0?= =?UTF-8?q?=EB=8A=94=20=EC=A1=B0=EA=B1=B4=EC=97=90=20=ED=8A=B9=EC=A0=95=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=20=EB=B0=8F=20cmd=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eactive/eai/rms/common/filter/RequestWrapper.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/eactive/eai/rms/common/filter/RequestWrapper.java b/src/main/java/com/eactive/eai/rms/common/filter/RequestWrapper.java index 1fca3a8..57c7ebc 100644 --- a/src/main/java/com/eactive/eai/rms/common/filter/RequestWrapper.java +++ b/src/main/java/com/eactive/eai/rms/common/filter/RequestWrapper.java @@ -158,7 +158,7 @@ class RequestWrapper extends HttpServletRequestWrapper { // src 속성 화이트리스트 필터링 - 허용된 프로토콜만 통과 value = filterSrcAttribute(value); - // 리치 텍스트 파라미터는 문자 변환을 건너뛰고 XSS 패턴 필터링만 적용 + // 리치 텍스트 파라미터와 메시지 템플릿 저장 요청은 문자 변환 없이 XSS 패턴 필터링만 적용 if (!shouldSkipCharConvert()) { StringBuilder sb = new StringBuilder(); value = convertChars(value, sb); @@ -179,6 +179,15 @@ class RequestWrapper extends HttpServletRequestWrapper { if (param == null) { return false; } + // 상세 화면은 .view로 열리지만 등록/수정 데이터는 .json으로 POST됨. + // 문자 발송에 사용되는 입력값이 HTML 엔티티로 저장되지 않도록 함. + if ("POST".equalsIgnoreCase(getMethod()) + && "/onl/apim/template/messageTemplateMan.json".equals(getServletPath())) { + String cmd = super.getParameter("cmd"); + if ("INSERT".equals(cmd) || "UPDATE".equals(cmd)) { + return true; + } + } for (String skipParam : SKIP_CHAR_CONVERT_PARAMS) { if (StringUtils.equalsIgnoreCase(param, skipParam)) { return true;