我以这种方式在我的 JSP 中显示字符串:
${someString}
当然,这个字符串可能包含特殊的 html 字符。目前可以 HTML 注入恶意代码(例如,如果 someString 是 javascript 包含 - <script src...>
)。
如何确保在打印之前所有字符串都已转义?
我正在使用 Spring MVC 和 JSP。
我以这种方式在我的 JSP 中显示字符串:
${someString}
当然,这个字符串可能包含特殊的 html 字符。目前可以 HTML 注入恶意代码(例如,如果 someString 是 javascript 包含 - <script src...>
)。
如何确保在打印之前所有字符串都已转义?
我正在使用 Spring MVC 和 JSP。
您可以使用JSTL 核心:
<%@ 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。
您还可以使用在页面级别控制此行为<spring:htmlEscape defaultHtmlEscape="true" />
在 JSP/Java 中您应该使用以下代码:
在 JSP/HTML 中:
<c:out value="TR tag </tr> Script Tag <script>alert("hello Rahul")</script>" escapeXml="true" />