Apache Tomcat 9.0.96 JSTL c:out 不再转义文本并且行为不一致

问题描述 投票:0回答:1

自 2024 年 10 月 8 日发布 Apache Tomcat servlet 容器 9.0.96 版本以来,c:out 标记的行为有所不同,看起来像是潜在的安全问题(代码注入?)

看起来在某些情况下它不再逃避

value
属性。

版本 9.0.95(及之前的版本)没有此行为。

以下是重现问题的方法。使用一个简单的测试文件(例如,在 ROOT Web 应用程序中将其用作

index.jsp
,以及应用程序的 lib 文件夹中的
taglibs-standard-impl-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
):

<%@ 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; }">

enter image description here

在 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" }">

enter image description here

更糟糕的是,当刷新页面时(上面的结果只获取一次,JSP编译后),则呈现如下:

<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" }">

enter image description here

jstl tomcat9
1个回答
0
投票

经过更广泛的研究,可以在这里找到与所描述的行为没有直接联系的问题:

https://bz.apache.org/bugzilla/show_bug.cgi?id=69399

可能最好避免使用 9.0.96,直到它被修复。

© www.soinside.com 2019 - 2024. All rights reserved.