Как избежать приложений из атак XSS?

Как безопасно защищать наши веб-приложения от атак XSS? Одно приложение является неприступным для атаки, если оно не делает никакого преобразования специальных charecters.

Ответ 1

Вы должны вывести HTML-код из любого ввода, прежде чем вывести его обратно пользователю. Некоторые ссылки:

Ответ 2

Входы HTML-экранирования работают очень хорошо. Но в некоторых случаях бизнес-правила могут потребовать, чтобы вы НЕ избежали HTML. Использование REGEX не подходит для задачи, и слишком сложно найти подходящее решение, используя его.

Лучшее решение, которое я нашел, это использовать: http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

Он создает дерево DOM с предоставленным вводом и фильтрует любой элемент, который ранее не разрешен белым списком. API также имеет другие функции для очистки html.

Ответ 3

Просто добавьте в список WhiteFang34:

У него есть несколько встроенных белых списков, таких как разрешение HTML, HTML и т.д.

Я выбрал это для Apache Commons StringEscapeUtils.escapeHtml() из-за того, как он обрабатывает апострофы. То есть если наши пользователи вводят:

У мамы Алана был хороший рецепт домового.

JSoup оставит только апостроф, тогда как Apache Commons избежит этой строки, как:

Алан\у мамы был хороший рецепт домового.

Что бы я не хотел беспокоиться о unescaping перед отображением пользователю.