将带有 HTML 代码的字符串注入和解释到 JSF 页面的组件
Posted
技术标签:
【中文标题】将带有 HTML 代码的字符串注入和解释到 JSF 页面的组件【英文标题】:Component to inject and interpret String with HTML code into JSF page 【发布时间】:2012-09-21 16:29:08 【问题描述】:我正在使用带有 JSF 2.0 的 PrimeFaces 来构建一个应用程序。我正在使用 PrimeFaces <p:editor>
组件使用户能够创建富文本。但是这个组件的输出是 html 源代码,看起来像这样:
String text = "<p>This text <i>contains</i> some <b>HTML</b> code.</p>";
当我在<h:outputText>
中显示如下:
<h:outputText value="#bean.text" />
然后它将 HTML 代码显示为纯文本:
此文本包含一些HTML代码。
是否有任何组件可以解释 HTML 源代码,例如<i>
实际上显示为斜体,<b>
显示为粗体?
此文本包含一些HTML代码。
【问题讨论】:
【参考方案1】:默认情况下,JSF 会从支持 bean 属性中转义 HTML,以防止 XSS 攻击漏洞。要禁用此功能,只需将<h:outputText>
的escape
属性设置为false
。
<h:outputText ... escape="false" />
这样 HTML 就不会被转义,因此会被网络浏览器解释。
与具体问题无关,请注意 XSS 攻击,因为您在这里基本上重新显示未转义的用户控制输入。您可能需要事先对其进行消毒。
What is the general concept behind XSS? CSRF, XSS and SQL Injection attack prevention in JSF Server side HTML sanitizer/cleanup for JSF Escape everything but linebreaks in h:outputText【讨论】:
以上是关于将带有 HTML 代码的字符串注入和解释到 JSF 页面的组件的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 JSF + Spring Web 应用程序输出 JSF 源代码而不是解释的 HTML 页面?
FacesContext 在带有 JSF 2.3 的 Wildfly 14 中不可注入(Mojarra,主模块)
JSF 2.2 将提交的空字符串值解释为 null 不起作用