JSF SelectItems和转义(xss)

前端之家收集整理的这篇文章主要介绍了JSF SelectItems和转义(xss)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的示例中有一个selectOneMenu与f:selectItems属性.选择项目从我的bean解析为这样:
  1. <h:selectOneMenu value="#{bean.value}">
  2. <f:selectItems value="#{bean.selectItems}" var="obj" itemValue="#{obj}" itemLabel="#{obj.name}"/>
  3. </h:selectOneMenu>

我的bean中的getSelectItems()方法看起来像这样:

  1. public List<MyObject> getSelectItems() {
  2. List<MyObject> list = new LinkedList<MyObject>();
  3.  
  4. MyObject obj = new MyObject("Peter");
  5. list.add(obj);
  6.  
  7. return list;
  8. }

显示的对象是具有属性“name”的简单对象.

到目前为止没有什么特别之处但是现在我改变了我的方法

  1. public List<MyObject> getSelectItems() {
  2. List<MyObject> list = new LinkedList<MyObject>();
  3.  
  4. MyObject obj = new MyObject("<script>alert('xss is bad');</script>");
  5. list.add(obj);
  6.  
  7. return list;
  8. }

JavaScript没有被MenuRenderer-Class转义,我的页面显示了alert-message.

是否有任何原因为什么SelectItem的escape-attribute的默认值为“false”?
我如何解决这个问题? (我使用Mojarra 2.1.7)

解决方法

实际上并不是假的.我报了 issue 2747.

同时,添加itemLabelEscaped =“true”来避免它.

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

请注意,只有当您使用GenericObjectSelectItems时,即当您提供E [] / List< E> / Map< K,V>而不是List< SelectItem> / SelectItem [].另外请注意,转义只是在用户控制的输入(绝对非常少的情况下,下拉列表值)时才是绝对强制的.

猜你在找的JavaScript相关文章