Я использую * myfaces-api-2.2.3 с javax.faces.STATE_SAVING_METHOD, установленным клиентом,
Я получил следующий сценарий,
1) Пользователь X регистрируется в системе и добавляет пользователя XXX (используя jsf f: ajax action), а при проверке инструментов chorme dev вы можете видеть форму, которая представляется вместе со значением ViewState.
2) Скопируйте это значение ViewState (из chrome dev tools → network tab) → поместите его в html файл с формой (который имитирует мой оригинальный пользователь X)
3) Выход из сеанса пользователя X (сеанс недействителен во время этого процесса)
4) Войти с пользователем Y → открыть этот html файл в браузере и нажать кнопку отправки формы → вы заметите, что пользователь XXX был добавлен (несмотря на то, что Значение ViewState, которое использовалось в форме, принадлежит другому пользователю (Пользователь X).
Я думал, что значение ViewState не может быть использовано таким образом, и я думал, что он должен предотвращать подобные действия, как можно использовать одно значение ViewState в совершенно новом сеансе, который имеет собственное значение ViewState и как я могу убедиться, что пользователь не сможет повторно использовать ViewState?
Посмотрите мой другой вопрос и BalusC answer: Предотвратите CSRF в JSF2 с сохранением состояния на стороне клиента