0

我需要一个类似于 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"/>

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

4

1 回答 1

5

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

其中,Jsoup能够做到这一点。这是其网站的相关性摘录。

清理不受信任的 HTML

问题

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

解决方案

将 jsoup HTMLCleanerWhitelist.

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" />
于 2013-12-11T12:20:27.157 回答