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 애플리케이션에서 권장되는 대표적인 이스케이프 처리 방법입니다. 특히 게시판, 댓글, 검색어 출력 등 사용자 입력값을 그대로 노출해야 하는 상황이라면 반드시 적용하는 것이 좋습니다.