JSF OutputText со стилем html

Мне нужен выходной текст, который работает как h:outputText с атрибутом escape="false", но не позволяет запускать скрипты. После небольшого поиска я обнаружил, что tr:outputFormatted делает это, но в нашем проекте мы не используем trinidad. Есть ли что-то вроде outputFormatted в томагавке или в другом taglib?

Например,

<h:outputText id="id" value="<b>test text</b><script type="text/javascipt">alert('I dont want these alert to show');</script>" escape="false"/>

который показывает «тестовый текст» жирным шрифтом, но также вызывает всплывающее диалоговое окно с предупреждением, я не хочу, чтобы скрипт запускался. он может написать код сценария или удалить его, но не должен запускаться.


person Utkan Ozyurek    schedule 11.12.2013    source источник
comment
Пожалуйста, покажите свой код и результат, который у вас есть, ожидаемый результат.   -  person Alexandre Lavoie    schedule 11.12.2013


Ответы (1)


Используйте парсер HTML, чтобы избавиться от этих вредоносных вещей.

Среди прочих на это способен Jsoup. Вот выдержка из со своего сайта.

Дезинфицировать ненадежный HTML

Проблема

Вы хотите разрешить ненадежным пользователям предоставлять HTML для вывода на вашем веб-сайте (например, для отправки комментариев). Вам необходимо очистить этот HTML, чтобы избежать атак межсайтового скриптинга (XSS).

Решение

Используйте HTML-код jsoup Cleaner с конфигурацией, заданной Whitelist.

String unsafe = 
      "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
String safe = Jsoup.clean(unsafe, Whitelist.basic());
      // now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>

Итак, все, что вам в основном нужно сделать, это следующее при подготовке текста:

String sanitizedText = Jsoup.clean(rawText, Whitelist.basic());

(вы можете сделать это до или после сохранения текста в БД, но имейте в виду, что, делая это раньше без сохранения исходного текста, вы больше не сможете обнаруживать злоумышленников и выполнять социальные действия)

а затем отобразить его следующим образом:

<h:outputText value="#{bean.sanitizedText}" escape="false" />
person BalusC    schedule 11.12.2013