Экранирование символов, чтобы избежать XSS в Java - PullRequest
0 голосов
/ 08 июня 2018

Мне нужно экранировать символы, чтобы избежать XSS.Я использую org.apache.commons.lang.StringEscapeUtils.escapeHtml (String str), который помогает следующим образом:

Необработанный ввод

" onmouseover=alert() src="

После выхода из HTML становится

" onmouseover=alert() src="

Однако в некоторых случаях отраженный ввод захватывается в одинарные кавычки, например:

test'];}alert();if(true){//

В этом конкретном случае экранирование HTML не оказывает никакого влияния.Тем не менее, org.apache.commons.lang.StringEscapeUtils также имеет метод escapeJavascript (String str), который преобразует входные данные в:

test\'];}alert();if(true){\/\/

Вопрос в том, могли бы вы очистить входные данные путем экранированияСначала HTML, а затем Javascript?Другой - заменить символ одинарной кавычки на \ 'вручную.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Как упомянул @ gabor-lengyel, я должен быть в состоянии избежать одиночной кавычки с помощью html-кодировщика.

Проблема, с которой я столкнулся, заключалась в том, что я использовал org.apache.commons.lang.stringescapeutils.escapeHtml, и он не мог экранировать одинарные кавычкис соответствующей сущностью HTML.Сейчас я использую org.springframework.web.util.HtmlUtils.htmlEscape, который способен обрабатывать как двойные, так и одинарные кавычки.

Еще раз спасибо @ gabor-lengyel за помощь!

0 голосов
/ 08 июня 2018

Вам не нужно использовать escapeJavascript / escapeEcmaScript для защиты XSS.Добавление escapeHtml вывода на ваш сайт должно быть безопасным:

"<p>" + escapeHtml(userProvided) + "</p>"

Если вы хотите что-то вроде:

 "<p class='" + userProvided + "'>" 

Сделать его безопаснее гораздо сложнее, и вы, вероятно, захотите использоватьбелый список допустимых символов / значений (например, регулярные выражения: [a-Z], (option1|option2)) и отбрасывает все неожиданное, а не экранирует его.

...