是否有任何JSF实用工具包或PrimeFaces / OmniFaces等库中可用的HTML清理程序或清理方法?
我需要通过p:编辑器清理用户的HTML输入,并使用 escape="true" 显示安全的HTML输出,遵循stackexchange样式 . 在显示HTML之前,我正在考虑将已清理的输入数据存储到数据库中,以便可以安全地使用 escape="true" 和XSS,这不是一个危险 .
escape="true"
为了实现这一点,你基本上需要一个独立的HTML parser . HTML解析相当复杂,其任务和责任超出了JSF,PrimeFaces和OmniFaces的范围 . 你应该只 grab 许多现有的HTML解析库中的一个 .
一个例子是Jsoup,它甚至有一个单独的方法用于针对Whitelist:Jsoup#clean()清理HTML的特定目的 . 例如,如果要允许某些没有图像的基本HTML,请使用Whitelist.basic():
String sanitizedHtml = Jsoup.clean(rawHtml, Whitelist.basic());
一种完全不同的替代方法是使用特定的文本格式化语法,例如Markdown(此处也使用) . 基本上所有这些解析器还会清理HTML下的内容 . 一个例子是Pegdown . 也许这就是你说"stackexchange style"时的实际意思 .
至于保存DB,最好将原始表单和解析表单保存在2个单独的文本列中 . 在编辑期间应重新显示原始表单 . 在编辑原始表单时,应在后台更新已解析的表单 . 在显示期间,显然只显示带有 escape="false" 的已解析表单 .
escape="false"
1 回答
为了实现这一点,你基本上需要一个独立的HTML parser . HTML解析相当复杂,其任务和责任超出了JSF,PrimeFaces和OmniFaces的范围 . 你应该只 grab 许多现有的HTML解析库中的一个 .
一个例子是Jsoup,它甚至有一个单独的方法用于针对Whitelist:Jsoup#clean()清理HTML的特定目的 . 例如,如果要允许某些没有图像的基本HTML,请使用Whitelist.basic():
一种完全不同的替代方法是使用特定的文本格式化语法,例如Markdown(此处也使用) . 基本上所有这些解析器还会清理HTML下的内容 . 一个例子是Pegdown . 也许这就是你说"stackexchange style"时的实际意思 .
至于保存DB,最好将原始表单和解析表单保存在2个单独的文本列中 . 在编辑期间应重新显示原始表单 . 在编辑原始表单时,应在后台更新已解析的表单 . 在显示期间,显然只显示带有
escape="false"
的已解析表单 .另见: