Побег всех строк в JSP/Spring MVC

Я показываю строки в моем JSP таким образом:

${someString}

эта строка может, конечно, содержать специальные html-символы. В настоящее время HTML-вводят вредоносный код (например, if someString - это javascript include - <script src...>).

Как я могу убедиться, что перед печатью все строки экранированы?

Я использую Spring MVC и JSP.

Ответ 1

Вы можете использовать JSTL core:

<%@ 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.

Ответ 2

Вы также можете контролировать это поведение на уровне страницы, используя <spring:htmlEscape defaultHtmlEscape="true" />

Ответ 3

В JSP/Java Вы должны использовать этот код:

В JSP/HTML:

<c:out value="TR tag </tr> Script Tag <script>alert("hello Rahul")</script>" escapeXml="true" />