21

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

${someString}

当然,这个字符串可能包含特殊的 html 字符。目前可以 HTML 注入恶意代码(例如,如果 someString 是 javascript 包含 - <script src...>)。

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

我正在使用 Spring MVC 和 JSP。

4

3 回答 3

30

您可以使用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

于 2013-07-29T09:11:00.917 回答
0

您还可以使用在页面级别控制此行为<spring:htmlEscape defaultHtmlEscape="true" />

于 2014-09-16T16:18:53.647 回答
-1

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

在 JSP/HTML 中:

<c:out value="TR tag </tr> Script Tag <script>alert("hello Rahul")</script>" escapeXml="true" />
于 2016-05-10T07:40:52.360 回答