2012-04-02 196 views
3

在我的jsf web应用程序中,我使用了messages.properties来输出一些文本。这段文本可以有html换行符,这样可以格式化输出文本。JSF 2.0; escape =“false”替代防止XSS?

这一切工作正常,如果我设置escape =“false”属性到outputtext。

问题是,具有值“false”的此属性不会阻止vor XSS(跨站点脚本),因此我删除此属性并使用默认值“true”。

所以,我不想分割的所有文本行单独在我的messages.properties的属性,如下面的例子:

mytext = This is my text<br />with line break and user value {0}... 

后:

mytext1 = This is my text 
mytext2 = with line break and user value {0}... 

有没有什么办法,比其他escape =“false”但是防止从xss?

谢谢!

+1

你只显示用户的内容时,这样的评语关心XSS。对于你自己的文本(从属性)只是不要在那里放置恶意代码:) – DRCB 2012-04-02 08:13:39

+0

好的,但如果有任何用户内容在那里?我更新了我的问题:-) – Tobi 2012-04-02 08:16:33

+0

我想这些只是只读组件,所以任何人如何XSS他们呢?我不认为输出文本关心客户发送的值。如果我错了,你总是可以扩展对XSS感兴趣并阻止XSS的JSF组件。如果您使用Tomcat 7.0,它提供了开箱即用的XSS预防功能 – DaTroop 2012-04-02 08:16:43

回答

4

应该可以在http://java.sun.com/jsp/jstl/functions命名空间中使用standard jstl functions只是逃避用户提供的参数:

<h:outputFormat value="#{bundle.myMessage}" escape="false"> 
    <f:param value="#{fn:escapeXml(param)}"/> 
</h:outputFormat> 
+0

听起来很不错!我会尽快尝试!谢谢! – Tobi 2012-04-02 12:22:40

1

如果您要从安全源输出某些HTML,但用户没有输入或编辑该源,则不会发生XSS。在这种情况下,您可以安全地使用escape="false"

+0

在一些输出文字中,我有一些用户内容...我更新了我的问题 – Tobi 2012-04-02 08:17:00