具有html样式的JSF OutputText

Utk*_*rek 0 jsf taglib html-escape

我需要一个输出文本,该文本的工作方式类似于具有escape =“ false”属性的h:outputText,但不允许脚本运行。稍作搜索后,我发现tr:outputFormatted可以做到这一点,但是在我们的项目中,我们不使用特立尼达。在战斧或另一个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"/>
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 5

使用HTML解析器摆脱那些恶意的事情。

在其他方面,Jsoup能够做到这一点。这是其网站的相关摘录。

清理不受信任的HTML

问题

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

将jsoup HTML Cleaner用于由指定的配置Whitelist

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>
Run Code Online (Sandbox Code Playgroud)

因此,在编写文本时,您基本上要做的只是以下操作:

String sanitizedText = Jsoup.clean(rawText, Whitelist.basic());
Run Code Online (Sandbox Code Playgroud)

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

然后显示如下:

<h:outputText value="#{bean.sanitizedText}" escape="false" />
Run Code Online (Sandbox Code Playgroud)