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)
会以粗体显示“测试文本”,但也会弹出警报对话框,我不希望脚本运行。它可以编写脚本代码或将其删除,但不应运行。
使用HTML解析器摆脱那些恶意的事情。
在其他方面,Jsoup能够做到这一点。这是其网站的相关摘录。
清理不受信任的HTML
问题
您想允许不受信任的用户提供HTML以在您的网站上输出(例如,作为评论提交)。您需要清除此HTML,以避免跨站点脚本(XSS)攻击。
解
将jsoup HTML
Cleaner用于由指定的配置Whitelist。Run Code Online (Sandbox Code Playgroud)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());
Run Code Online (Sandbox Code Playgroud)
(您可以在将文本保存到数据库之前或之后执行此操作,但请记住,如果在不保存原始文本之前执行此操作,则无法再检测到恶意用户并进行社交操作)
然后显示如下:
<h:outputText value="#{bean.sanitizedText}" escape="false" />
Run Code Online (Sandbox Code Playgroud)