java - Jsoup Element.val() 对编码后的 html 内容进行解码
问题描述
我在表单中有一个输入标记,其值是从 URL 的查询参数之一设置的。对于 XSS 保护,我在输入标签中设置查询参数值之前对它进行 html 编码。
在 URL 中发送的原始值:
SomeValueWithSpeci@lCh@cters<""><''>
Java 代码生成的 HTML 内容:
<form>
<input type='hidden' value="SomeValueWithSpeci@lCh@cters<""><''>" />
</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 库时检索编码值?
解决方案
Apache Commons - StringEscapeUtils.unescapeHtml4
String text = ""bread"";
StringEscapeUtils.unescapeHtml4(text); // bread
推荐阅读
- javascript - 关于使用扩展和字符串操作,foreach 循环的一点说明
- c++ - 一个使用链表 C++ 的简单工资系统
- ssl - 如何在 Digital Ocean OpenLiteSpeed 服务器上删除或编辑 SSL 证书
- python - 在 Qtext 编辑中格式化文本
- java - 无法添加或更新子行:尝试保存实体及其关系实体时出现外键约束失败错误
- mysql - 如何从 tar 文件中使用 TokuDB 安装 Percona 5.7
- cmake - CMake 找不到通过 Homebrew 安装的 Open MPI
- java - 具有相同状态的两个对象未从 HashMap 检索相同的值
- java - Break on exception in Java for "just my code"
- r - 根据 R 中的两个标准查找相应的值