You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Tomcat 9.0.96版本JSTL c:out标签转义失效存安全隐患

Apache Tomcat 9.0.96版本JSTL <c:out>标签转义异常问题

2024年10月8日发布的Apache Tomcat 9.0.96版本中,JSTL的<c:out>标签出现行为异常,疑似存在代码注入等安全隐患。该标签在特定场景下不再对value属性的内容进行转义,而9.0.95及更早版本无此问题。

复现步骤

  • 在ROOT webapp目录下创建index.jsp文件
  • 在应用的lib目录中放入taglibs-standard-impl-1.2.5.jar和taglibs-standard-spec-1.2.5.jar
  • index.jsp代码如下:
<%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%
String test = "{ \"key\" : \"value\" }";
java.util.Map<String, String> map = new java.util.HashMap<>();
map.put("test", test);
request.setAttribute("test", test);
request.setAttribute("map", map);
%>
<!DOCTYPE html>
<html lang="en">
    <body>
    <input type="text" name="test" id="test" value="<c:out value="${test}" />" />
    <br/>
    <input type="text" name="test" id="test" value="<c:out value="<%=test %>" />" />
    <br/>
    <c:forEach items="${map}" var="entry">
        <input id="${entry.key}" name="${entry.key}" type="text" value="<c:out value="${entry.value}" />">
        <br/>
    </c:forEach>

    <br/>
    <br/>
    Tomcat Version : <%= application.getServerInfo() %>
    <br/>
    Servlet Specification Version : <%= application.getMajorVersion() %>.<%= application.getMinorVersion() %> 
    <br/>
    JSP version : <%=JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %>
    </body>

</html>

渲染结果对比

Tomcat 9.0.95版本(关键部分)

<input type="text" name="test" id="test" value="{ &#034;key&#034; : &#034;value&#034; }" />
<input type="text" name="test" id="test" value="{ &#034;key&#034; : &#034;value&#034; }" />
<input id="test" name="test" type="text" value="{ &#034;key&#034; : &#034;value&#034; }">

Tomcat 9.0.96版本首次编译后渲染结果

<input type="text" name="test" id="test" value="{ &#034;key&#034; : &#034;value&#034; }" />
<input type="text" name="test" id="test" value="{ "key" : "value" }" />
<input id="test" name="test" type="text" value="{ "key" : "value" }">

Tomcat 9.0.96版本刷新页面后渲染结果

(仅首次编译后出现上述结果,刷新后所有<c:out>输出均未转义)

<input type="text" name="test" id="test" value="{ "key" : "value" }" />
<input type="text" name="test" id="test" value="{ "key" : "value" }" />
<input id="test" name="test" type="text" value="{ "key" : "value" }">

内容的提问来源于stack exchange,提问作者stefanu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:26:14