【问题标题】:Server side HTML sanitizer/cleanup for JSFJSF 的服务器端 HTML 清理程序/清理程序
【发布时间】:2014-06-03 17:30:38
【问题描述】:
在任何 JSF 实用工具包或 PrimeFaces/OmniFaces 等库中是否提供任何 HTML 清理程序或清理方法?
我需要清理用户通过 p:editor 输入的 HTML 并使用 escape="true" 显示安全的 HTML 输出,遵循 stackexchange 样式。在显示 HTML 之前,我正在考虑将经过处理的输入数据存储到数据库中,以便与 escape="true" 一起安全使用,并且 XSS 不是危险。
【问题讨论】:
标签:
jsf
primefaces
omnifaces
html-sanitizing
【解决方案1】:
为了实现这一点,您基本上需要一个独立的HTML parser。 HTML 解析相当复杂,其任务和责任超出了 JSF、PrimeFaces 和 OmniFaces 的范围。您应该只获取众多现有 HTML 解析库之一。
一个例子是Jsoup,它甚至有一个单独的方法用于针对Safelist净化HTML:Jsoup#clean()。例如,如果你想允许一些没有图像的基本 HTML,使用Safelist.basic():
String sanitizedHtml = Jsoup.clean(rawHtml, Safelist.basic());
一个完全不同的替代方法是使用特定的文本格式语法,例如Markdown(这里也使用)。基本上所有这些解析器也会在后台清理 HTML。一个例子是CommonMark。也许这就是您说“stackexchange 样式”时的实际意思。
至于保存在 DB 中,您最好将 both 原始和解析后的表单保存在 2 个单独的文本列中。原始表单应在编辑期间重新显示。当原始表单被编辑后,解析后的表单应该在后台更新。显示时,显然只显示解析后的表格escape="false"。
另见: