Toggle theme
문제를 잘 정의하는 것은 문제를 절반 해결한 것이다. - 2023.12
사용자 도구
Toggle theme
로그인
사이트 도구
검색
도구
문서 보기
이전 판
PDF로 내보내기
Fold/unfold all
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
현재 위치:
start
»
wiki
»
miscellaneous
»
escapehtmlandunescapehtml
wiki:miscellaneous:escapehtmlandunescapehtml
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== escapeHtml And unescapeHtml ====== <WRAP left notice 80%> * description : escapeHtml And unescapeHtml * author : 오션 * email : shlim@repia.com * lastupdate : 2022-04-12 The </WRAP> <WRAP clear></WRAP> ==== R-Utils > Crypto ==== \\ \\ ====== escapeHtml ====== 1. Encryption - //**''escapeHtml''**// 선택 - Input Text 입력란에 입력 후,\\ <code html> <p>MyName<p> </code> \\ 2. Encrypt Text 버튼을 클릭 시 Input Text 입력란에 입력되어 있던 상기 코드가 아래와 같이 변경되는 이유는\\ <code javascript> <p>MyName<p> </code> \\ 2.1 - 이때 Encryption - Input Text 입력란은 아래와 같이 코딩되어 있었고,\\ <code java> <input id="encryptInptText" class="encryptInptFld" name="encryptInptFld" type="text" placeholder="Please input ID or Password" value="<c:out value="${inputParam.encryptInptFld}" />"/> </code> \\ 2.2 - jsp에서 JSTL로 아래와 같이 처리하면,\\ <code java> <c:out value="값" /> </code> \\ 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"''**를 입력하면,\\ <code java> <input id="encryptInptText" class="encryptInptFld" name="encryptInptFld" type="text" placeholder="Please input ID or Password" value="<c:out value="${inputParam.encryptInptFld}" escapeXml="false" />"/> </code> \\ 2.6 - Encrypt Text 버튼을 클릭하여도 jsp의 Input Text 입력란은 아래와 같이 그대로 유지됩니다.\\ <code html> <p>MyName<p> </code> \\ 2.7 - 하지만 내부에서 Encrypted Result에 전달되는 값은 아래와 같으며, \\ <code javascript> <p>MyName<p> </code> \\ 2.8 - 상기의 값을 escapeHtml 처리를 하여 최종적으로 Encrypted Result 입력란에 표시되는 값은 아래와 같습니다.\\ <code java> &lt;p&gt;MyName&lt;p&gt; </code> \\ 2.9 - 정리 : 입력값, JSTL 처리값, escapeHtml 처리값은 아래와 같습니다.\\ 2.9.1 - 입력값, jsp에 표시되는 값\\ <code html> <p>MyName<p> </code> 2.9.2 - JSTL 처리값(내부에서만 존재)\\ <code javascript> <p>MyName<p> // <P></p> 태그에서 "<" ⇒ "<", ">" ⇒ ">"로 변경되어 표시됩니다. </code> 2.9.3 - escapeHtml 처리 완료 후 표시되는 값\\ <code java> &lt;p&gt;MyName&lt;p&gt; // "<" ⇒ "&lt;", ">" ⇒ "&gt;"로 변경되어 표시됩니다. </code> \\ \\ ====== 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 - 코드 ==== \\ 코드 수정 전\\ <code java> <!-- Input Encrypted ID or Password field --> <label for="decryptInptText" class="decryptInptTtl">Input Text</label> <input id="decryptInptText" class="decryptInptFld" name="decryptInptFld" type="text" placeholder="암호화된 ID 또는 Password를 입력하세요" value="<c:out value="${inputParam.decryptInptFld}" />"/> </code> \\ 코드 수정 후\\ <code java> <!-- Input Encrypted ID or Password field --> <label for="decryptInptText" class="decryptInptTtl">Input Text</label> <input id="decryptInptText" class="decryptInptFld" name="decryptInptFld" type="text" placeholder="암호화된 ID 또는 Password를 입력하세요" value="<c:out value="${inputParam.decryptInptFld}" escapeXml="false"/>"/> </code> \\ 코드 수정 후 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) & 많은 변수 === <code java> 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(">", ">"))); </code> \\ === 3.2.2 - 지저분한 코드(4 lines) === <code java> 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(">", ">"))); </code> \\ === 3.2.3 - 지저분한 코드(2 lines) === <code java> String unescapedHtmlRslt = resultData.setDecryptRsltFld(StringEscapeUtils.unescapeHtml(cryptoVO.getDecryptInptFld().replaceAll("&", "&"))); unescapedHtmlRslt = (StringEscapeUtils.unescapeHtml(unescapedHtmlRslt.replaceAll("&", "&").replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">"))); </code> \\ === 3.2.4 - 최종(1 line) === <code java> String unescapedHtmlRslt = resultData.setDecryptRsltFld(StringEscapeUtils.unescapeHtml(cryptoVO.getDecryptInptFld().replaceAll("&", "&").replaceAll("&", "&").replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">"))); </code> \\ ** HtmlTagFilterRequestWrapper.class 확인 및 학습 필요\\ \\ ** 삽질 금지...\\ {{tag> 오션, escapeHtml, unescapeHtml}}
/volume1/web/dokuwiki/data/pages/wiki/miscellaneous/escapehtmlandunescapehtml.txt
· 마지막으로 수정됨: 2023/01/13 18:44 (바깥 편집)
문서 도구
문서 보기
이전 판
역링크
PDF로 내보내기
Fold/unfold all
맨 위로