转义 JSP/Spring MVC 中的所有字符串
2022-09-02 03:50:55
我以这种方式在 JSP 中显示字符串:
${someString}
当然,此字符串可能包含特殊的 html 字符。目前,可以HTML注入恶意代码(例如,如果某些String是javascript,则包含 - )。<script src...>
如何确保在打印前对所有字符串都进行转义?
我正在使用Spring MVC和JSP。
我以这种方式在 JSP 中显示字符串:
${someString}
当然,此字符串可能包含特殊的 html 字符。目前,可以HTML注入恶意代码(例如,如果某些String是javascript,则包含 - )。<script src...>
如何确保在打印前对所有字符串都进行转义?
我正在使用Spring MVC和JSP。
您可以使用 JSTL 核心:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用 <c:out value=“${someString}”/>
标记来显示字符串。 转义 HTML 字符,以便您可以避免跨站点脚本,您可以通过设置属性来指定。另一个优点是,您还可以提供默认值,以防计算结果为 。<c:out>
escapeXml=true
value
null
您也可以使用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。
您还可以使用<spring:htmlEscape defaultHtmlEscape="true" />