JSF SelectItems和转义(xss)

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

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

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

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

        return list;
    }

显示的对象是具有属性“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;
    }

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

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

解决方法

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

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

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

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

猜你在找的JavaScript相关文章