JSP 페이지 내의 이스케이프되지 않은 EL 표현식의 안전하지 않은 데이터를 보고합니다. 이러한 경우는 크로스 사이트 스크립팅(XSS) 취약점을 일으킬 수 있습니다.

아래의 설명에서 untainted 데이터라는 용어는 안전하고 신뢰할 수 있는 데이터를 의미하며 tainted(안전하지 않고 신뢰할 수 없음)의 반의어입니다. 자세한 정보는 taint 검사를 참조하세요.

안전한(untainted) 객체:

JSP 페이지는 제공된 데이터에 따라 다른 컨텍스트를 가질 수 있으며 한 컨텍스트에서 데이터가 안전하더라도 다른 컨텍스트에서는 안전하지 않을 수 있습니다. 크로스 사이트 스크립트 방지 족보에서 예시를 살펴보세요. 이 검사는 모든 컨텍스트에서 untainted(안전함)로 표시된 데이터를 건너뜁니다.

이 검사는 다음의 옵션을 사용하여 메서드와 필드를 안전한 것으로 표시합니다.

이 검사는 안전하지 않은 데이터가 JSP 페이지 내의 안전한 태그에 도달하는 경우를 강조 표시하지 않습니다. 예를 들어 JSTL taglib의 out 태그는 기본적으로 주어진 값을 이스케이프하므로 안전합니다. 안전한 태그의 목록을 구성할 수 있습니다(전체 범위를 정의하려면 tag 또는 attribute를 생략하세요).

"JSTL <out> 태그로 래핑" 빠른 수정이 EL 식을 JSTL <out> 태그로 래핑합니다.

전:

  
    ${foo}
  

후:

  
  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out value="${foo}"/>
  

"JSTL escapeXml() 함수로 래핑"은 안전하지 않은 값을 escapeXml 이스케이프 함수로 래핑합니다.

전:

  
  <%@ taglib prefix="custom" uri="WEB_INF/custom.tld" %>
  <custom:tag value="${foo}"/>
  

후:

  
    <%@ taglib prefix="custom" uri="WEB_INF/custom.tld" %>
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    <custom:tag value="${fn:escapeXml(foo)}"/>
  

이 외에도 선택된 태그를 안전한 태그에 추가하거나 관련 메서드 또는 필드에 untainted 어노테이션을 추가할 수 있는 빠른 수정이 더 있습니다.

사용자 지정 이스케이프 함수를 추가할 수 있습니다('이스케이프 함수' 탭 참조). 이제 안전한 값을 반환하는 JSTL의 함수가 포함됩니다(예: 잘 알려진 escapeXml 함수). 네임스페이스 URI가 다른 JSTL 함수를 정의할 필요가 없습니다. 'http://java.sun.com/jsp/jstl/functions' 또는 'http://java.sun.com/jstl/functions'가 사용 중인 경우 나머지도 확인합니다. 이스케이프 함수를 이름으로 어디에서든 건너뛸 수 있습니다. 이를 위해서는 네임스페이스 URI 필드를 비워두세요.