具有html样式的JSF OutputText

时间:2013-12-11 11:56:08

标签: jsf taglib html-escape

我需要一个输出文本,其作用类似于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"/>

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

1 个答案:

答案 0 :(得分:4)

使用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());

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

然后按如下方式显示:

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