任何 JSF 实用工具包或 PrimeFaces/OmniFaces 等库中是否有任何 HTML 清理程序或清理方法?
escape="true"
我需要按照 stackexchange 样式通过 p:editor 清理用户输入的 HTML,并使用 显示安全的 HTML 输出。在显示 HTML 之前,我正在考虑将经过清理的输入数据存储到数据库中,以便可以安全使用,escape="true"
并且 XSS 不会造成危险。
任何 JSF 实用工具包或 PrimeFaces/OmniFaces 等库中是否有任何 HTML 清理程序或清理方法?
escape="true"
我需要按照 stackexchange 样式通过 p:editor 清理用户输入的 HTML,并使用 显示安全的 HTML 输出。在显示 HTML 之前,我正在考虑将经过清理的输入数据存储到数据库中,以便可以安全使用,escape="true"
并且 XSS 不会造成危险。
为了实现这一点,您基本上需要一个独立的HTML 解析器。HTML 解析相当复杂,其任务和责任超出了 JSF、PrimeFaces 和 OmniFaces 的范围。您应该只获取许多现有的 HTML 解析库之一。
一个例子是Jsoup,它甚至有一个单独的方法用于针对Safelist
:清理 HTML 的特定目的Jsoup#clean()
。例如,如果您想允许一些没有图像的基本 HTML,请使用Safelist.basic()
:
String sanitizedHtml = Jsoup.clean(rawHtml, Safelist.basic());
一个完全不同的替代方法是使用特定的文本格式语法,例如Markdown(这里也使用)。基本上所有这些解析器也会在后台清理 HTML。一个例子是CommonMark。也许这就是您说“stackexchange 样式”时的实际意思。
至于保存在数据库中,您最好将原始表单和解析后的表单都保存在 2 个单独的文本列中。原始表单应在编辑期间重新显示。当原始表单被编辑后,解析后的表单应该在后台更新。在显示过程中,显然只显示已解析的表单escape="false"
。