提问人:Matthias 提问时间:10/18/2023 更新时间:10/18/2023 访问量:15
jsoup.clean 将单引号替换为双引号。我怎样才能防止这种情况发生?
jsoup.clean replaces single quotes with double quotes. How can I prevent that?
问:
对于我们的应用程序,我们允许用户输入 HTML,稍后会向其他用户显示。
出于安全原因,我们会清理此 HTML,并且不允许用户保存 HTML,因为在其他用户的浏览器中运行可能不安全。
为此,我们有这两种方法(简化后,它们的作用要大得多,但这是这个问题的本质):
public static String sanitizeHTML(String html) {
return Jsoup.clean(html,
"",
Safelist.relaxed()
.addAttributes(":all", "style")
.addAttributes(":all", "class"),
new Document.OutputSettings().prettyPrint(false));
}
和
public static boolean isHTMLStringPolluted(String html) {
return !sanitizeHTML(html).equals(html);
}
我们用于验证用户输入。isHTMLStringPolluted
如果用户现在输入,则完全没问题。
如果用户输入该方法将返回 false,因为 sanitizeHTML 方法返回 .<a href="https://www.stackoverflow.com">Link</a>
<a href='https://www.stackoverflow.com'>Link</a>
<a href="https://www.stackoverflow.com">Link</a>
这只是这个问题最简单的例子之一。用户能够添加更复杂的 HTML。此外,它们不仅有一个 HTML 编辑器,这些 HTML 片段可以通过一种非常复杂的数学语言(类似于 Excel 公式)创建、计算和连接,该语言在整个应用程序中使用数据、变量和其他 HTML 输出。这个 HTML 就是结果。
我们不想强迫用户只使用双引号,也不想用双引号替换单引号,以确保原始用户输入被完全接受或拒绝。
有没有办法配置 jsoup 以保持引号的原样?
我还使用了不同的库,例如 OWASP Java HTML Sanitizer,但它有更多的限制和缺陷,不符合我们的要求。
答: 暂无答案
评论