转义JSP / Spring MVC中的所有字符串
问题内容:
我以这种方式在JSP中显示字符串:
${someString}
该字符串当然可以包含特殊的html字符。当前可以HTML注入恶意代码(例如,如果someString是javascript include-
<script src...>
)。
如何确保在打印之前所有字符串都已转义?
我正在使用Spring MVC和JSP。
问题答案:
您可以使用JSTL
core
:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用<c:out value="${someString}"/>
标签显示字符串。<c:out>
转义HTML字符,以便避免跨站点脚本编写,可以通过设置属性来指定escapeXml=true
。另一个优点是,你还可以提供情况下默认值的value
计算结果为null
。
您也可以使用fn:escapeXml()
EL功能。您需要为此添加JSTL函数。
<%@ 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。