Разница в выводе HTML из <c: out escapeXml = "false"> и скриптлета

Я использую JSTL для отображения моих данных из базы данных, в которой записи также содержат некоторые специальные символы. Когда я отображаю свою запись с помощью JSTL следующим образом:

<c:out value="${record.fname}" escapeXml="false" />

Тогда я должен включить escapeXml="false" в моем коде, чтобы специальные символы отображались в окне моего браузера. Но когда я удаляю его, он просто показывает мне HTML-код для этого. Но когда я показываю свою запись, используя скриптлет следующим образом:

<%= record.getFname() %>

Он автоматически показывает только специальные символы вместо отображения HTML-кодов для этого.

Я хотел бы отметить, что я уже выполнил свою работу, но просто немного смутил то, что лучше.

1 ответ

c:out для escapeXml по умолчанию установлено значение trueОдна из целей этого состоит в том, чтобы избежать межсайтовых сценариев, таких как предотвращение выполнения script или любой другой html теги и отображать их как текст вместо. Так что это дополнительная функция в JSTL, которую вы можете сказать. Если вы хотите сделать c:out выводить как обычный HTML-контент, который вы должны явно установить escapeXml ложно. Но <%= record.getFname() %>, это эквивалентно равнине out.println, который не имеет этой возможности экранировать теги Html.

Устанавливайте для атрибута escapeXML значение false только при доступе к внутренним параметрам, а не к параметрам или атрибутам, указанным в URL-адресе. Страницы уязвимы для XSS-атак при использовании неэкранированных параметров URL.

Другие вопросы по тегам