转义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" />
您还可以使用
在页面级别控制此行为