Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

JSP에서 XML 마크업 문자를 이스케이프하는 방법: fn:escapeXml() 함수 완벽 정리

fn:escapeXml() 함수란?

JSTL(JSP Standard Tag Library)의 functions 태그 라이브러리에서 제공하는 fn:escapeXml() 함수는 XML 또는 HTML 마크업으로 해석될 수 있는 특수 문자(<, >, &, 작은따옴표, 큰따옴표 등)를 안전한 엔티티 형태로 변환(이스케이프)해 주는 기능을 합니다. 사용자 입력값을 JSP 페이지에 출력할 때 발생할 수 있는 화면 깨짐 현상이나 XSS(크로스 사이트 스크립팅) 같은 보안 취약점을 예방하는 데 필수적으로 활용됩니다.

문법(Syntax)

fn:escapeXml() 함수의 기본 문법은 다음과 같습니다.

java.lang.String escapeXml(java.lang.String)

문자열 하나를 인자로 전달하면, 마크업으로 오인될 수 있는 문자가 모두 이스케이프 처리된 새로운 문자열을 반환합니다.

사용 예제(Example)

다음 예제는 fn:escapeXml() 함수를 적용했을 때와 적용하지 않았을 때의 출력 차이를 비교해서 보여줍니다.

<%@ taglib uri = "https://java.sun.com/jsp/jstl/core" prefix = "c" %>
<%@ taglib uri = "https://java.sun.com/jsp/jstl/functions" prefix = "fn" %>
<html>
   <head>
      <title>Using JSTL Functions</title>
   </head>
   <body>
      <c:set var = "string1" value = "This is first String."/>
      <c:set var = "string2" value = "This <abc>is second String.</abc>"/>
      <p>With escapeXml() Function:</p>
      <p>string (1) : ${fn:escapeXml(string1)}</p>
      <p>string (2) : ${fn:escapeXml(string2)}</p>
      <p>Without escapeXml() Function:</p>
      <p>string (1) : ${string1}</p>
      <p>string (2) : ${string2}</p>
   </body>
</html>

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

With escapeXml() Function:
string (1) : This is first String.
string (2) : This <abc>is second String.</abc>
Without escapeXml() Function:
string (1) : This is first String.
string (2) : This is second String.

결과 분석

fn:escapeXml()을 적용한 경우, 문자열에 포함된 <abc> 부분이 브라우저에 의해 실제 태그로 해석되지 않고 텍스트 그대로 화면에 표시됩니다. 반면 함수를 적용하지 않으면 브라우저가 <abc>를 실제 HTML 태그로 인식하여 태그 자체는 사라지고 내부 텍스트만 출력되는 것을 확인할 수 있습니다.

이처럼 fn:escapeXml() 함수는 외부에서 입력된 데이터를 안전하게 렌더링해야 하는 모든 JSP 애플리케이션에서 권장되는 대표적인 이스케이프 처리 방법입니다. 특히 게시판, 댓글, 검색어 출력 등 사용자 입력값을 그대로 노출해야 하는 상황이라면 반드시 적용하는 것이 좋습니다.