2013-02-22 26 views
10

nel mio esempio c'è un selectOneMenu con un attributo f: selectItems. Le Select-oggetti sono risolti dal mio fagiolo in questo modo:JSF SelectItems e escaping (xss)

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

I getSelectItems metodo() nella mia fagioli sembra che:

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

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

     return list; 
    } 

Gli oggetti che vengono visualizzati sono oggetti semplici con un attributo " nome".

Niente di speciale fino a questo punto. Ma ora ho cambiare il mio metodo per che:

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; 
    } 

Il javascript Indifferente ottenere sfuggito da MenuRenderer-Class e la mia pagina mi mostra l'avviso-messaggio.

C'è qualche motivo per cui il valore predefinito dell'attributo escape di SelectItem è "false"? Come posso risolvere questo problema? (Uso Mojarra 2.1.7)

+0

È possibile trovare la risposta [qui] (http://stackoverflow.com/questions/14238646/how-to-escape-fselectitem-itemlabel-attribute) –

+0

@VikasV: il problema concreto dell'OP riguarda il contrario. – BalusC

risposta

12

L'impostazione predefinita non dovrebbe essere stata false. L'ho segnalato come issue 2747.

Nel frattempo, aggiungere itemLabelEscaped="true" per uscire comunque.

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

Si noti che questo è necessario solo quando si utilizza GenericObjectSelectItems, vale a dire quando si sta fornendo un E[]/List<E>/Map<K, V> invece di List<SelectItem>/SelectItem[]. Si noti inoltre che l'escaping è assolutamente obbligatorio quando si tratta di input controllati dall'utente (che è, per fortuna, molto raramente nel caso di valori dropdown).

+0

Questo problema è stato risolto in JSF 2.2 ([JAVASERVERFACES_SPEC_PUBLIC-1167] (https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1167)) e Mojarra 2.2.6 ([JAVASERVERFACES-3143] (https: // java. net/jira/browse/JAVASERVERFACES-3143)). –