【问题标题】:Jsoup Element.val() decodes the Encoded html contentJsoup Element.val() 对编码后的 html 内容进行解码
【发布时间】:2019-12-20 23:38:47
【问题描述】:

我在表单中有一个输入标记,其值是从 URL 的查询参数之一设置的。对于 XSS 保护,我在输入标签中设置查询参数值之前对它进行 html 编码。

在 URL 中发送的原始值:

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

Java 代码生成的 HTML 内容:

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

用于解析上述 html 内容的 Java 代码。

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 库一样检索编码值?

【问题讨论】:

  • input.html() 返回编码的 HTML 文本。但是&amp;lt;&amp;gt; 被解码了。
  • 是的。那没有帮助。我想我将不得不找到一个不同的库,或者必须解析字符串响应以找出值。 @saka1029,还是谢谢 :)

标签: java jsoup


【解决方案1】:

Apache Commons - StringEscapeUtils.unescapeHtml4

String text = "&quot;bread&quot;";
StringEscapeUtils.unescapeHtml4(text); // bread

【讨论】:

  • 抱歉耽搁了。我有一段时间没有检查这个了。你的答案是正确的,我最终使用了 Apache Commons 库并使用了 StringEscapeUtils 类。还是谢谢。
猜你喜欢
  • 2012-03-16
  • 2014-01-21
  • 2011-12-02
  • 1970-01-01
  • 2011-06-29
  • 2012-11-20
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
相关资源
最近更新 更多