Jos*_* MN 19 java spring jsp escaping spring-mvc
我用这种方式在JSP中显示字符串:
${someString}
Run Code Online (Sandbox Code Playgroud)
当然,这个字符串可能包含特殊的html字符.目前可以HTML注入恶意代码(例如,如果someString是javascript包含 - <script src...>).
如何在打印前确保所有字符串都被转义?
我正在使用Spring MVC和JSP.
NIN*_*OOP 25
您可以使用JSTL核心:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Run Code Online (Sandbox Code Playgroud)
使用<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" %>
Run Code Online (Sandbox Code Playgroud)
另一种可能的方法是构建自定义ELResolver.
为EL表达式评估启用变量和属性解析行为的自定义.
这篇博客提供了一个如何完成它的工作示例.
对于整个Spring MVC应用程序,您可以在web.xml中指定转义:
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
但是转义只适用于spring标签,例如:
<form:input path="formField" htmlEscape="true" />
Run Code Online (Sandbox Code Playgroud)
最后,您可以尝试第三方库XSSFilter.