【问题标题】:JSF OutputText with html style带有 html 样式的 JSF OutputText
【发布时间】:2013-12-11 11:56:08
【问题描述】:

我需要一个类似于 h:outputText 的输出文本,带有 escape="false" 属性,但不允许脚本运行。经过一番搜索,我发现 tr:outputFormatted 可以做到这一点,但在我们的项目中,我们不使用 trinidad。在 tomahawk 或另一个 taglib 中是否有类似 outputFormatted 的东西?

例如,

<h:outputText id="id" value="<b>test text</b><script type="text/javascipt">alert('I dont want these alert to show');</script>" escape="false"/>

显示“测试文本”粗体,但它也会弹出警报对话框,我不希望脚本运行。它可以编写脚本代码或删除它但不应该运行。

【问题讨论】:

  • 请显示您的代码和结果,预期结果。

标签: jsf taglib html-escape


【解决方案1】:

使用 HTML 解析器来摆脱那些恶意的东西。

其中,Jsoup 能够做到这一点。这是来自its site 的相关性摘录。

Sanitize untrusted HTML

问题

您希望允许不受信任的用户提供 HTML 用于您网站上的输出(例如,作为评论提交)。您需要清理此 HTML 以避免cross-site scripting (XSS) 攻击。

解决方案

使用 jsoup HTML CleanerWhitelist 指定的配置。

String unsafe = 
      "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
String safe = Jsoup.clean(unsafe, Whitelist.basic());
      // now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>

所以,在准备文本的过程中,您基本上需要做的就是以下几点:

String sanitizedText = Jsoup.clean(rawText, Whitelist.basic());

(您可以在将文本保存到数据库之前或之后进行,但请记住,在不保存原始文本之前进行操作时,您将无法检测到恶意用户并不再进行社交操作) em>

然后显示如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2012-11-10
    相关资源
    最近更新 更多