Как безопасно защищать наши веб-приложения от атак XSS? Одно приложение является неприступным для атаки, если оно не делает никакого преобразования специальных charecters.
Как избежать приложений из атак XSS?
Ответ 1
Вы должны вывести HTML-код из любого ввода, прежде чем вывести его обратно пользователю. Некоторые ссылки:
- OWASP XSS (Cross Site Scripting) Предотвращение чит-листа
- Рассмотрите возможность использования
StringEscapeUtils.escapeHtml()
из Apache Commons Lang - Или используйте
HtmlUtils.htmlEscape()
из Spring - Предотвращение атак XSS
- Предотвращение XSS в веб-приложении JSP/Servlet
Ответ 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 перед отображением пользователю.