2013-02-22 12 views
10

私の例では、f:selectItems属性を持つselectOneMenuがあります。セレクトアイテムは、このように私の豆から解決されています表示されるオブジェクトは、 "属性を持つ単純なオブジェクトですJSF SelectItemsとエスケープ(xss)

public List<MyObject> getSelectItems() { 
     List<MyObject> list = new LinkedList<MyObject>(); 

     MyObject obj = new MyObject("Peter"); 
     list.add(obj); 

     return list; 
    } 

<h:selectOneMenu value="#{bean.value}"> 
    <f:selectItems value="#{bean.selectItems}" var="obj" itemValue="#{obj}" itemLabel="#{obj.name}"/> 
</h:selectOneMenu> 

方法getSelectItems()私の豆のそれのように見えます名"。

この時点まで特別なことはありません。しかし、今、私はそれに私の方法を変更します。

public List<MyObject> getSelectItems() { 
     List<MyObject> list = new LinkedList<MyObject>(); 

     MyObject obj = new MyObject("<script>alert('xss is bad');</script>"); 
     list.add(obj); 

     return list; 
    } 

javascriptのdoesn'tがMenuRendererクラスと私のページでエスケープを取得私に警告メッセージが表示されます。

SelectItemのエスケープ属性のデフォルト値が「false」になる原因はありますか? どうすれば問題を解決できますか? (私はMojarra 2.1.7を使用します)

+0

あなたは答えを見つけることができます。[こちら](http://stackoverflow.com/questions/14238646/how-to-escape-fselectitem-itemlabel-attribute) –

+0

@VikasV:OPの具体的な問題は、もう一方の方法に関係します。 – BalusC

答えて

12

デフォルトは実際にはfalseではありません。私はそれをissue 2747と報告しました。

一方で、とにかくエスケープするにはitemLabelEscaped="true"を追加してください。あなたの代わりにList<SelectItem>/SelectItem[]E[]/List<E>/Map<K, V>を供給しているときにGenericObjectSelectItems、すなわちを使用している場合にのみ必要であること

<f:selectItems ... itemLabelEscaped="true" /> 

注意。また、エスケープは、ユーザーが制御する入力に関係する場合にのみ絶対的に必須であることに注意してください(これは幸いにもドロップダウン値の場合ほとんどありません)。

+0

これは、JSF 2.2([JAVASERVERFACES_SPEC_PUBLIC-1167](https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1167))とMojarra 2.2.6([JAVASERVERFACES-3143](https:// java。 net/jira/browse/JAVASERVERFACES-3143))。 –