在我的例子中有一个selectOneMenu,其中包含af:selectItems-attribute.select-items从我的bean解析如下:
<h:selectOneMenu value="#{bean.value}">
<f:selectItems value="#{bean.selectItems}" var="obj" itemValue="#{obj}" itemLabel="#{obj.name}"/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
我的bean中的方法getSelectItems()看起来像这样:
public List<MyObject> getSelectItems() {
List<MyObject> list = new LinkedList<MyObject>();
MyObject obj = new MyObject("Peter");
list.add(obj);
return list;
}
Run Code Online (Sandbox Code Playgroud)
显示的对象是具有属性"name"的简单对象.
在这一点上没什么特别的.但现在我改变我的方法:
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;
}
Run Code Online (Sandbox Code Playgroud)
JavaScript没有被MenuRenderer-Class转义,我的页面显示警报消息.
是否有任何原因导致SelectItem的escape属性的默认值为"false"?我该如何解决这个问题?(我使用Mojarra 2.1.7)
Bal*_*usC 12
确实应该没有默认值false.我已将其报告为问题2747.
与此同时,itemLabelEscaped="true"无论如何都要加以逃避.
<f:selectItems ... itemLabelEscaped="true" />
Run Code Online (Sandbox Code Playgroud)
请注意,这只是在必要的时候你使用GenericObjectSelectItems,也就是说,当你提供一个E[]/ List<E>/ Map<K, V>而不是List<SelectItem>/ SelectItem[].另请注意,当涉及用户控制的输入时,转义仅是绝对必需的(幸运的是,下拉值中很少出现这种情况).
| 归档时间: |
|
| 查看次数: |
3068 次 |
| 最近记录: |