【问题标题】:How to skip rendering images in Jsf如何在 Jsf 中跳过渲染图像
【发布时间】:2013-06-02 13:42:28
【问题描述】:

我有一个包含图像和文本的 html 字符串。在渲染时,我只想渲染文本而不是图像。

我试过这样做:

<h:outputText escape="false" value="#{fn:replace(answerBlock.content,'<img>','')}" />

但这会返回一个格式错误的 html,然后在屏幕上呈现。

如何跳过 img 标签,只在 jsf 中呈现文本?

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    不要使用字符串或正则表达式函数来操作用户控制的 HTML。在这个特定示例中,XSS 攻击漏洞的风险非常大,因为并未涵盖所有方面(例如<script>onclick 等)。只需使用真正了解 XSS 含义的 HTML 解析器。例如Jsoup,它也有一个whitelist sanitizer feature

    String sanitizedHtml = Jsoup.clean(dirtyHtml, Whitelist.basic());
    

    然后改为显示:

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

    为了提高性能,请考虑只解析一次并将其与原始数据一起保存在数据库中。

    另见:

    【讨论】:

      【解决方案2】:

      我会将代码添加到您的answerBlock bean。比如:

      public String imageStrippedContent() {
          return stripImgTags( content() );
      }
      
      private String stripImgTags( String html ) {
          // strip img tag using dom parser like jtidy, or maybe regex
          ...
      }
      

      然后将你的 facelet 修改为:

      <h:outputText escape="false" value="#{answerBlock.imageStrippedContent} />
      

      【讨论】:

        猜你喜欢
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-11
        • 2019-01-13
        • 1970-01-01
        • 2021-01-01
        相关资源
        最近更新 更多