将带有 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>";

当我在&lt;h:outputText&gt; 中显示如下:

<h:outputText value="#bean.text" />

然后它将 HTML 代码显示为纯文本:

此文本包含一些HTML代码。

是否有任何组件可以解释 HTML 源代码,例如&lt;i&gt; 实际上显示为斜体,&lt;b&gt; 显示为粗体?

此文本包含一些HTML代码。

【问题讨论】:

【参考方案1】:

默认情况下,JSF 会从支持 bean 属性中转义 HTML,以防止 XSS 攻击漏洞。要禁用此功能,只需将&lt;h:outputText&gt;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 不起作用

JSF 2.2将空字符串提交的值解释为null无效

将带有 Ajax4jsf 1.x 的 JSF 1.1 迁移到 JSF 2

如何将占位符属性添加到 JSF 输入组件?