转义 JSP/Spring MVC 中的所有字符串

2022-09-02 03:50:55

我以这种方式在 JSP 中显示字符串:

${someString}

当然,此字符串可能包含特殊的 html 字符。目前,可以HTML注入恶意代码(例如,如果某些String是javascript,则包含 - )。<script src...>

如何确保在打印前对所有字符串都进行转义?

我正在使用Spring MVC和JSP。


答案 1

您可以使用 JSTL 核心

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

使用 <c:out value=“${someString}”/> 标记来显示字符串。 转义 HTML 字符,以便您可以避免跨站点脚本,您可以通过设置属性来指定。另一个优点是,您还可以提供默认值,以防计算结果为 。<c:out>escapeXml=truevaluenull

您也可以使用EL功能。您需要包含 JSTL 函数fn:escapeXml()

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

另一种可能的方法,是构建一个自定义的ELResolver

允许自定义 EL 表达式计算的变量和属性解析行为。

本博客提供了一个如何完成它的工作示例。


对于整个Spring MVC应用程序,您可以在Web中指定转义.xml

<context-param>
   <param-name>defaultHtmlEscape</param-name>
   <param-value>true</param-value>
</context-param>

但是,转义只适用于标签,比如:spring

<form:input path="formField" htmlEscape="true" />

最后,您可以尝试第三方库XSSFilter


答案 2

您还可以使用<spring:htmlEscape defaultHtmlEscape="true" />