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

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

${someString} 

当然,这个字符串可能包含特殊的html字符。 目前可以通过HTML注入恶意代码(例如,如果someString是javascript包含 – )。

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

我正在使用Spring MVC和JSP。

您可以使用JSTL核心 :

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

使用标签显示字符串。 转义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中指定转义:

  defaultHtmlEscape true  

但是转义仅适用于spring标签,例如:

  

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

在JSP / Java中您应该使用以下代码:

在JSP / HTML中:

 " escapeXml="true" /> 

您还可以使用在页面级别控制此行为