Разница в выводе 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.