В JSF, как лучше всего предотвратить подделку форм? - PullRequest
3 голосов
/ 01 февраля 2010

Мы используем JSF 1.x с включенным сохранением состояния на стороне сервера. У нас есть проблема, когда злонамеренный пользователь, реализованный как веб-бот, может отправить страницу без отправки всех полей, которые должны быть в форме. Это приводит к тому, что некоторые валидаторы не вызывают, которые должны вызываться и т. Д.

Мы хотели бы запретить пользователям добавлять / удалять поля из формы и отправлять форму (если они хотят отправить форму, все ожидаемые поля больше всего там). В прошлом я делал это, используя MD5-хэш идентификаторов полей на странице плюс неизвестную фразу, сохраненную как скрытое поле на странице, и фильтр сеанса, который генерирует ожидаемый хеш-код с учетом переданных идентификаторов полей и сравнивает их с значение в скрытом поле.

Могу ли я что-нибудь сделать из коробки с JSF, чтобы пользователь не мог манипулировать формой? Или со сторонней библиотекой?

1 Ответ

5 голосов
/ 01 февраля 2010

В JSF 1.x уже не должно быть возможности, если эти поля были установлены явно с required="true".Если вы пропустите это и / или замените настраиваемым валидатором или выполните проверку внутри метода действия bean-компонента вместо этого, тогда боты действительно смогут изменить форму.

Так что, чтобы это исправить, добавьте явно required="true" вобязательные поля с жестким значением на стороне сервера (например, не required="#{not empty param.foo}" или около того, где клиент / бот может контролировать param.foo).Поскольку состояние просмотра хранится на стороне сервера, веб-бот не может раскрыть / изменить его состояние.

По крайней мере, это теория.Или это должен быть очень умный веб-бот или, возможно, (старая?) Ошибка / эксплойт в impl / версии JSF, используемой в вашем веб-приложении.Последнюю версию JSF 1.x можно загрузить здесь .


Обновление : для целевого ответа JSF 2.x перейдите на Validator пропущенкогда входные данные удаляются в клиенте - это в соответствии со спецификацией JSF? В двух словах, это возможно в JSF 2.x, и это можно (как предполагается) защитить, установив проверку бина или ограничения БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...