报告 JSP 页面中未转义的 EL 表达式中的非安全数据。 此类情况可能导致跨站脚本攻击 (XSS) 漏洞。

下面的描述使用术语未受污染的数据来指代安全可信的数据,与受污染的(不安全、不可信)相对。 请参阅 污点检查获取更多信息。

安全的(未受污染的)对象为:

对于所提供的数据,JSP 页面可能有不同的上下文,如果数据对于一个上下文是安全的,并不一定意味着它对所有上下文都是安全的。 有关示例,请参阅跨站脚本攻击防御备忘单。 此检查会跳过在所有上下文中标记为 untainted(安全)的数据。

此检查支持以下选项以将方法和字段标记为安全:

此检查不会高亮显示 JSP 页面中非安全数据到达安全标记的位置。 例如,JSTL taglib 中的 out 标记是安全的,因为它在默认情况下会转义给定值。 安全标记列表是可配置的(省略 tagattribute 值可以定义整个范围)。

“使用 JSTL <out> 标记包装”快速修复会使用 JSTL <out> 标记包装 EL 表达式。

之前:

  
    ${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 字段留空。