Как очистить HTML-код, чтобы предотвратить атаки XSS в Java или JSP?

Я пишу приложение на основе сервлета, в котором мне нужно предоставить систему обмена сообщениями. Я спешу, поэтому я выбираю CKEditor, чтобы предоставить возможности редактирования, и в настоящее время вставляю сгенерированный html непосредственно на веб-страницу отображение всех сообщений (сообщения хранятся в базе данных MySQL, fyi). CKEditor уже фильтрует HTML на основе белого списка, но пользователь все равно может вводить вредоносный код с запросом POST, поэтому этого недостаточно.

Хорошая библиотека уже существует для предотвращения атак XSS путем фильтрации тэгов HTML, но она написана на PHP: HTML очиститель

Итак, существует аналогичная зрелая библиотека, которая может использоваться в Java? Простая замена строки, основанная на белом списке, кажется недостаточной, поскольку я хотел бы также фильтровать неверные теги (что могло бы изменить дизайн страницы, на которой отображается сообщение).

Если этого не происходит, тогда как мне следует продолжить? Парсер XML выглядит излишним.

Примечание. В SO есть много вопросов об этом, но все ответы относятся к фильтру ВСЕ HTML-теги: я хочу сохранять допустимые теги форматирования.

Ответ 2

Я бы рекомендовал использовать Jsoup. Здесь выдержка из своего сайта.

Санизировать ненадежный HTML

Проблема

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

Решение

Используйте jsoup HTML 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>

Jsoup предлагает больше преимуществ, чем это. См. Также Плюсы и минусы парсеров HTML в Java.

Ответ 3

Если ни один из готовых вариантов не кажется достаточным, есть прекрасная серия статей о XSS и предотвращении атак в Код Google, Он должен предоставить много информации для работы, если вы закончите спуск по этому пути.