У меня есть тег ввода внутри формы, значение которого задается одним из параметров запроса URL. Для защиты XSS я использую html-кодирование значения параметра запроса, прежде чем устанавливать его во входном теге.

Исходное значение отправлено в URL:

SomeValueWithSpeci@lCh@cters<""><''>

HTML-контент, сгенерированный кодом Java:

<form>
    <input type='hidden' value="SomeValueWithSpeci@lCh@cters&lt;&quot;&quot;&gt;&lt;''&gt;" />
</form>

Java-код для разбора вышеуказанного HTML-контента.

Document doc = Jsoup.parse(htmlResponse);
Elements formElements = doc.getElementsByTag("form");
Elements inputTag = null;
for(Element form : formElements){
     inputTags = form.geElementsByTag("input");
}

for(Element input : inputTags){
     System.out.println(input.val());
}

Выход:

SomeValueWithSpeci@lCh@cters<""><''>

При отправке формы браузер декодирует HTML-содержимое и отправляет фактическое значение получателю. Пишу тест для проверки кодировки. Он отправляет запрос в конечную точку и получает этот html-ответ. Если я печатаю ответ, закодированная строка не декодируется, но когда я использую библиотеку Jsoup, она декодируется. Я считаю, что когда я разбираю HTML, закодированное значение декодируется, или когда я получаю значение входного тега element.val () в это время, оно декодируется. Хотел бы знать, когда он действительно декодируется.

И есть ли способ получить закодированное значение, поскольку оно использует библиотеку Jsoup?

1
Shreyas 21 Дек 2019 в 02:38
1
input.html() возвращает закодированный текст HTML. Но &lt; и &gt; декодируются.
 – 
user4910279
21 Дек 2019 в 03:47
Да. Это бесполезно. Я полагаю, мне придется найти другую библиотеку или мне придется проанализировать ответ String, чтобы узнать значение. @ saka1029, все равно спасибо :)
 – 
Shreyas
23 Дек 2019 в 08:13

1 ответ

Лучший ответ

Apache Commons - StringEscapeUtils.unescapeHtml4

String text = "&quot;bread&quot;";
StringEscapeUtils.unescapeHtml4(text); // bread
1
Zack 12 Янв 2020 в 08:41
1
Извините за задержку. Я давно не проверял это. И ваш ответ правильный, я использовал библиотеку Apache Commons и использовал класс StringEscapeUtils. Спасибо, в любом случае.
 – 
Shreyas
9 Май 2020 в 22:40