====== escapeHtml And unescapeHtml ====== * description : escapeHtml And unescapeHtml * author : 오션 * email : shlim@repia.com * lastupdate : 2022-04-12 The ==== R-Utils > Crypto ==== \\ \\ ====== escapeHtml ====== 1. Encryption - //**''escapeHtml''**// 선택 - Input Text 입력란에 입력 후,\\

MyName

\\ 2. Encrypt Text 버튼을 클릭 시 Input Text 입력란에 입력되어 있던 상기 코드가 아래와 같이 변경되는 이유는\\ <p>MyName<p> \\ 2.1 - 이때 Encryption - Input Text 입력란은 아래와 같이 코딩되어 있었고,\\ "/> \\ 2.2 - jsp에서 JSTL로 아래와 같이 처리하면,\\ \\ 2.3 - 상기 코드에서 **''escapeXml="true"''**로 default 설정되기 때문에 캐릭터 **''<''**, **''>''**, **''&''**, **'' ' ''**, **''"''**들을\\ 각각 캐릭터 엔티티 **''<''**, **''>''**, **''&''**, **'''''**, **''"''**로 변경하여 jsp에 표시되기 때문입니다.\\ \\ 2.4 - Ref Site\\ [[https://honinbo-world.tistory.com/61|jstl 사용할 때 tag가 jsp 화면에 그대로 출력될 경우, escapeXml]]\\ [[https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/out.html|JSTL core Tag out]]\\ \\ 2.5 - 아래와 같이 **''escapeXml="false"''**를 입력하면,\\ "/> \\ 2.6 - Encrypt Text 버튼을 클릭하여도 jsp의 Input Text 입력란은 아래와 같이 그대로 유지됩니다.\\

MyName

\\ 2.7 - 하지만 내부에서 Encrypted Result에 전달되는 값은 아래와 같으며, \\ <p>MyName<p> \\ 2.8 - 상기의 값을 escapeHtml 처리를 하여 최종적으로 Encrypted Result 입력란에 표시되는 값은 아래와 같습니다.\\ &lt;p&gt;MyName&lt;p&gt; \\ 2.9 - 정리 : 입력값, JSTL 처리값, escapeHtml 처리값은 아래와 같습니다.\\ 2.9.1 - 입력값, jsp에 표시되는 값\\

MyName

2.9.2 - JSTL 처리값(내부에서만 존재)\\ <p>MyName<p> //

태그에서 "<" ⇒ "<", ">" ⇒ ">"로 변경되어 표시됩니다. 2.9.3 - escapeHtml 처리 완료 후 표시되는 값\\ &lt;p&gt;MyName&lt;p&gt; // "<" ⇒ "&lt;", ">" ⇒ "&gt;"로 변경되어 표시됩니다. \\ \\ ====== unescapeHtml ====== ===== 3. 문제 ===== Crypto-unescapeHtml에서 Decrypt Text 실행 시 에러 발생\\ \\ Decrypt Text 버튼 클릭 전\\ {{:wiki:miscellaneous:decode-unescapehtml01.png?600|}}\\ \\ Decrypt Text 버튼 클릭 후\\ {{:wiki:miscellaneous:decode-unescapehtml02.png?600|}}\\ \\ 결과값이 출력되면서 동시에 input Text란에 입력했던 값이 ''**%%<p>MyName</p>%%**'' → ''**%%&lt;p&gt;MyName&lt;/p&gt;%%**''으로 변경됨.\\ \\ ==== 3.1 - 코드 ==== \\ 코드 수정 전\\ "/> \\ 코드 수정 후\\ "/> \\ 코드 수정 후 Decrypt Text 버튼 클릭 후의 캡쳐\\ {{:wiki:miscellaneous:decode-unescapehtml03.png?600|}}\\ \\ 결과값이 출력되면서 동시에 input Text란에 입력했던 값 ''**%%<p>MyName</p>%%**''이 변하지 않고 그대로 표시됨을 확인.\\ \\ === Ref Link === [[https://needjarvis.tistory.com/51|[JSTL] Tag가 jsp화면에 그대로 노출될 경우, escapeXml]]\\ [[https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/out.html|JSTL Core - Tag out]]\\ \\ JSTL Core - Tag out에서 ''**%%escapeXml%%**''에 대한 설명은 아래와 같습니다.\\ >>Determines whether characters <,>,&,'," in the resulting string should be converted to their corresponding character entity codes. Default value is true. >> 결과 문자열의 문자 ''**%%<%%**'', ''**%%>%%**'', ''**%%&%%**'', ''**%%'%%**'', ''**%%"%%**''를 해당 문자 엔티티 코드로 변환해야 하는지 여부를 결정합니다. 기본값은 true입니다.\\ \\ ==== 3.2 - unescapeHtml 전처리 과정 실수 ==== \\ === 3.2.1 - 지저분한 코드(4 lines) & 많은 변수 === String unescapeHtml1stRslt = resultData.setDecryptRsltFld(StringEscapeUtils.unescapeHtml(cryptoVO.getDecryptInptFld().replaceAll("&", "&"))); String unescapeHtml2ndRslt = (StringEscapeUtils.unescapeHtml(unescapeHtml1stRslt.replaceAll("&", "&"))); String unescapeHtml3ndRslt = (StringEscapeUtils.unescapeHtml(unescapeHtml2ndRslt.replaceAll("'", "'"))); String unescapeHtml4thRslt = (StringEscapeUtils.unescapeHtml(unescapeHtml3ndRslt.replaceAll("<", "<").replaceAll(">", ">"))); \\ === 3.2.2 - 지저분한 코드(4 lines) === String unescapedHtmlRslt = resultData.setDecryptRsltFld(StringEscapeUtils.unescapeHtml(cryptoVO.getDecryptInptFld().replaceAll("&", "&"))); unescapedHtmlRslt = (StringEscapeUtils.unescapeHtml(unescapedHtmlRslt.replaceAll("&", "&"))); unescapedHtmlRslt = (StringEscapeUtils.unescapeHtml(unescapedHtmlRslt.replaceAll("'", "'"))); unescapedHtmlRslt = (StringEscapeUtils.unescapeHtml(unescapedHtmlRslt.replaceAll("<", "<").replaceAll(">", ">"))); \\ === 3.2.3 - 지저분한 코드(2 lines) === String unescapedHtmlRslt = resultData.setDecryptRsltFld(StringEscapeUtils.unescapeHtml(cryptoVO.getDecryptInptFld().replaceAll("&", "&"))); unescapedHtmlRslt = (StringEscapeUtils.unescapeHtml(unescapedHtmlRslt.replaceAll("&", "&").replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">"))); \\ === 3.2.4 - 최종(1 line) === String unescapedHtmlRslt = resultData.setDecryptRsltFld(StringEscapeUtils.unescapeHtml(cryptoVO.getDecryptInptFld().replaceAll("&", "&").replaceAll("&", "&").replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">"))); \\ ** HtmlTagFilterRequestWrapper.class 확인 및 학습 필요\\ \\ ** 삽질 금지...\\ {{tag> 오션, escapeHtml, unescapeHtml}}