Zend форма: безопасный способ сохранить идентификатор записи при редактировании? - PullRequest
1 голос
/ 03 сентября 2011

Я новичок в Zend Framework и у меня проблема с созданием формы редактирования с помощью Zend_Form.

Моя проблема заключается в том, что мне нужно сохранить идентификатор записи во время редактирования, я видел некоторыепримеры, которые используют скрытое поле формы, но скрытое поле может быть изменено пользователем.

Итак: как мне установить поле формы, которое заполняется $form->populate($data); и доступно после отправки запроса, ноне редактируется / не виден пользователю каким-либо образом?

Спасибо за любую помощь!

Ответы [ 3 ]

3 голосов
/ 03 сентября 2011

Я не уверен, есть ли смысл пытаться скрыть значение.

Примите во внимание следующее:

  • Чтобы отобразить правильную форму редактора, вам нужен идентификаторобъекта, который должен быть отредактирован.
  • Прежде чем разрешить пользователю редактировать определенный идентификатор, вы должны проверить, может ли пользователь его редактировать.

Таким образом, если выпоместите идентификатор в форму, это не должно иметь большого значения:

  • Когда вы POST форму редактирования, вы должны снова проверить, что пользователь все еще может редактировать идентификатор.
  • Если пользователь изменяет скрытый идентификатор, это не имеет значения.Они все еще могут пойти и отредактировать другой идентификатор, найдя его на сайте.(Предполагается, что ваш чек не сообщил, что у пользователя нет доступа)
0 голосов
/ 03 сентября 2011

Zend_Form генерирует HTML-элемент формы с указанными вами элементами формы. Таким образом, его возможности элемента сужаются до простой формы HTML.

Скрытый элемент формы используется для передачи тех данных, которые пользователь не должен вводить вручную. Но, как вы сами сказали, нет никакой гарантии, что это не может быть подделано. поэтому при использовании скрытого значения формы безопасность не обеспечивается.

В большинстве случаев лучше использовать значения на стороне сервера (например, хранящиеся в сеансах) для ссылки на значения, которые должны быть защищены от пользователя.

Я предлагаю вам сохранить идентификатор в значении сеанса, а затем вы можете использовать ключ сеанса в скрытом поле формы. Таким образом, пользователь не может изменить идентификатор цели. Однако вы не можете использовать $ form-> populate ($ values) для этого за один шаг. вам нужно будет установить целевое значение с помощью других шагов:

  1. получить данные из сеанса
  2. установить значение элемента формы с выбранными данными
0 голосов
/ 03 сентября 2011

какие данные вы хотите скрыть?данные должны быть в post или get.Если вы не поместите свои данные в форму, тогда вам придется использовать GET, который менее безопасен, чем POST.Если у вас есть какие-то данные, и вы не хотите, чтобы пользователь видел эти данные, вам не следует помещать эти данные в форму. Вы можете хранить и извлекать скрытые данные, используя пароль s submitted values.lets suppose your hidden field is user s. Вам не нужно отправлять пароль обратноклиент, когда клиент редактирует форму. вы можете манипулировать паролем в вашем контроллере в соответствии с предоставленными пользователем именем и фамилией.Если вы все еще настаиваете, вы можете попробовать зашифровать данные с помощью ZF, повторить свое значение и установить зашифрованные данные в скрытый элемент формы.

...