2013-02-22 12 views
10

istnieje selectOneMenu w moim przykładzie z atrybutem f: selectItems. SELECT-przedmioty są rozwiązywane od mojego fasoli tak:JSF SelectItems i escaping (xss)

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

The getSelectItems() metoda w moim fasoli wygląda tak:

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

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

     return list; 
    } 

te, które są wyświetlane obiekty są proste obiekty z atrybutem " Nazwa".

Nic specjalnego do tego momentu. Ale teraz mogę zmienić metodę, że:

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 doesnt się uciec przez MenuRenderer Klasy i mojej stronie pokazuje mi Alert komunikat.

Czy istnieje przyczyna, dla której domyślną wartością atrybutu escape obiektu SelectItem jest "false"? Jak mogę rozwiązać ten problem? (Używam Mojarra 2.1.7)

+0

Możesz znaleźć odpowiedź [tutaj] (http://stackoverflow.com/questions/14238646/how-to-escape-fselectitem-itemlabel-attribute) –

+0

@VikasV: Konkretny problem PO dotyczy odwrotności. – BalusC

Odpowiedz

12

Domyślnie nie powinno być false. Zgłosiłem to jako issue 2747. W takim razie dodaj itemLabelEscaped="true", aby uciec i tak.

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

Należy pamiętać, że jest to konieczne tylko gdy używasz GenericObjectSelectItems, to znaczy, gdy jesteś dostarczanie E[]/List<E>/Map<K, V> zamiast List<SelectItem>/SelectItem[]. Należy również pamiętać, że wymuszanie jest absolutnie obowiązkowe, gdy dotyczy danych wprowadzanych przez użytkownika (co na szczęście bardzo rzadko zdarza się w przypadku wartości rozwijanych).

+0

Zostało to naprawione w JSF 2.2 ([JAVASERVERFACES_SPEC_PUBLIC-1167] (https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1167)) i Mojarra 2.2.6 ([JAVASERVERFACES-3143] (https: // java. net/jira/browse/JAVASERVERFACES-3143)). –