2013-07-16 3 views
2

У меня есть бобин (somebean) с тремя булевыми свойствами a, b и c, каждый из которых имеет геттер и сеттер.Какие свойства в компоненте поддержки JSF могут быть заданы пользователем?

У меня есть форма, которая выглядит следующим образом:

<h:outputText rendered="#{somebean.b}"> 
    B is true 
</h:outputText> 
<h:form id="blah"> 
    <h:inputHidden value="#{somebean.a}" id="a"/> 
    <h:commandLink id="zzzz" value="do it" action="#{somebean.doIt}"/> 
</h:form> 

Какой из трех свойств a, b и c может быть установлен клиентом? Я попробовал добавить b=true и c=true к запросу POST, но SomeBean.setB(boolean) и SomeBean.setC(boolean) никогда не вызываются. Поэтому возможно установить только a - логика заключается в том, что если в JSF, который ее устанавливает, есть поле, клиенту разрешено его устанавливать. Но, возможно, я ошибаюсь, и у меня просто есть имя по умолчанию, о котором я не знаю, что можно использовать для его установки ...

Должен ли я просто предположить, что любое свойство в моем компоненте может быть установлено клиентом ? Если нет, то какие из них я должен предположить, что клиент может установить (и, следовательно, беспокоиться во время проверки)?

Также, что произойдет, если у меня есть форма, условно предоставленная? например:

<h:outputText rendered="#{somebean.b}"> 
    <h:form id="blah"> 
     <h:inputHidden value="#{somebean.a}" id="a"/> 
     <h:commandLink id="zzzz" value="do it" action="#{somebean.doIt}"/> 
    </h:form> 
</h:outputText> 

В этом случае может a еще быть установлен, если b ложно?


«Клиент», я имею в виду что-либо, отправляющее HTTP-трафик на мой сайт. Это может быть, например, вредоносный код.

ответ

2

Какие свойства в компоненте поддержки JSF могут быть заданы пользователем?

Те связаны с EditableValueHolder компонента, такие как UIInput и друзей (в том числе <f:viewParam>!), С предварительным условием, что они rendered="true", disabled="false" и readonly="false" во время запроса применяются значения фазы.

Другим возможным способом является использование @ManagedProperty("#{param.xxx}") свойства объекта с областью действия запроса или жесткого кода ExternalContext#getRequestParameterMap() доступа в некотором бин-методе, который вызывается во время HTTP-запроса.

Так, только когда вас как разработчик явно связать свойство компонента держателя для редактирования значения, которое вынесенные неинвалид/только для чтения, или если вы в настоящее время разработчика явно задать параметр запроса как свойство , В текущих версиях реализаций JSF нет абсолютно никаких дыр в безопасности с повторной обработкой возможности установки необъявленных/несвязанных свойств с помощью HTTP-средств. Также невозможно отправить произвольное значение компоненту UISelectOne или UISelectMany путем подмены HTTP-запроса, он будет только в "Validation Error: Value is not valid".


Что касается дыр в безопасность в более старых реализациях JSF, только и только тогда, когда вы перемещаетесь к другой точке зрения, используя includeViewParams="true" в версии Mojarra старше 2.0.7 и 2.1.5, то все выражения EL в поле зрения будут оцениваться параметры, такие как #{bean.setArbitraryProperty('foo')}. См. Также issue 2247.Я не знаю никаких дыр в безопасности в MyFaces; это не потому, что их нет, а просто потому, что я не использую/не отслеживаю их.

+1

классный рассказ, bro – megazord

+1

Есть ли авторитетный источник, цитирующий это? мне кажется сомнительным, что на модель безопасности влияет веб-разметка. то снова вы, кажется, являетесь авторитетным источником информации JSF – megazord

Смежные вопросы