我需要一个输出文本,其作用类似于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"/>
显示“测试文本”粗体,但它也弹出警告对话框,我不希望脚本运行。它可以编写脚本代码或删除它但不应该运行。
答案 0 :(得分:4)
使用HTML解析器摆脱这些恶意事件。
其中,Jsoup能够做到这一点。以下是its site的相关摘录。
Sanitize untrusted HTML
问题
您希望允许不受信任的用户为您网站上的输出提供HTML(例如,作为评论提交)。您需要清除此HTML以避免cross-site scripting(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>
因此,在准备文本时,您基本上需要做的就是以下内容:
String sanitizedText = Jsoup.clean(rawText, Whitelist.basic());
(您可以在保存数据库中的文本之前或之后执行此操作,但请记住,在不保存原始文本之前执行此操作时,您无法再检测恶意用户并执行社交操作)
然后按如下方式显示:
<h:outputText value="#{bean.sanitizedText}" escape="false" />