Как санировать HTML-код, чтобы предотвратить атаки XSS в Java или JSP? - PullRequest
15 голосов
/ 27 августа 2010

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

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

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

Если нет, то как мне действовать?Синтаксический анализатор XML кажется излишним.

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

Ответы [ 3 ]

22 голосов
/ 27 августа 2010

Я бы порекомендовал использовать для этого 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 .

9 голосов
/ 27 августа 2010

Вы должны использовать AntiSamy .( Вот что я сделал )

2 голосов
/ 27 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...