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

如何在JSP搜索输入框中处理XSS攻击并正确使用c:out标签?

解决JSP搜索输入框中使用<c:out>转义特殊字符的问题

嘿,我明白你遇到的困扰了——用户输入的特殊字符(比如>)直接渲染导致UI异常,而你之前尝试的<c:out>写法没生效,问题出在标签嵌套和属性值的处理上,我来给你一步步讲清楚解决方案:

1. 先分析你之前写法的问题

你写的代码里,<c:out>的value属性是空的,而且引号没有正确处理,JSP解析时根本不知道要输出什么内容,自然不会生效:

<input type="text" name="search" id="search" value="<c:out value=""/>" />

2. 正确的<c:out>使用方式

如果你是要回显用户提交的search参数,需要把要输出的变量(比如${param.search})放到<c:out>的value属性里,同时注意引号嵌套(用单引号包裹<c:out>的value值,避免和input的value属性双引号冲突):

<input type="text" name="search" id="search" value="<c:out value='${param.search}' />" />

或者保持双引号,转义内部的双引号(不过用单引号更简洁):

<input type="text" name="search" id="search" value="<c:out value=\"${param.search}\" />" />

这样<c:out>会自动把特殊字符转义成HTML实体,比如>会变成&gt;,浏览器就不会把它当成HTML标签解析,UI也就不会出现异常了。

3. 替代方案:使用JSTL函数fn:escapeXml

除了<c:out>,你也可以直接用JSTL的fn:escapeXml函数来转义,写法更简洁:

<input type="text" name="search" id="search" value="${fn:escapeXml(param.search)}" />

4. 必要的前置准备

  • 使用<c:out>需要在JSP页面顶部引入JSTL核心标签库:
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
  • 如果使用fn:escapeXml,还要额外引入JSTL函数标签库:
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:36:30