Zend Framework - безопасный способ передачи параметра из представления в контроллер - PullRequest
1 голос
/ 31 января 2011

Я использовал Zend Framework около 3 месяцев, и я ищу способ безопасной передачи параметров из представления в контроллер.Я предпочитаю передавать параметры, такие как метод $ _POST, но я не хочу использовать формы.Есть ли способ использовать в ZF?Я знаю только метод url (), но не знаю, хорошо ли этот метод работает для передачи важных данных в контроллер.

Ответы [ 3 ]

5 голосов
/ 31 января 2011

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

  • Строка запроса
  • Скрытые элементы в формах
  • Cookie
  • Session

Сессия будет самой безопасной. В ZF у вас есть Zend_Session компонент, который поможет вам в управлении сессиями.

Что касается отправки POST без формы, то это довольно сложно. Взгляните на: Zend Framework: Как отправить данные на какую-либо внешнюю страницу (например, внешний платежный шлюз) без использования формы? . Однако, если вы хотите отправлять только данные POST, вы можете сделать это в PHP, используя cURL .

1 голос
/ 22 июня 2011

Я думаю, что вы можете использовать дайджест-ключ

Этот метод не имеет ничего общего с безопасностью GET, POST, Cookies или Session, с которыми клиент на стороне клиента может манипулировать параметрами.* Пример:

mywebsite.com/widget.php?id=1234&action=delete

Человек может изменить идентификатор параметра GET и удалить все, что захочет.Очевидно, ваш контроллер должен реализовать Auth и, возможно, ACL для аутентификации и авторизации, но это все равно не предотвратит фальсификацию URL.Например, что мешает Бобу войти в систему и изменить URL-адрес для редактирования виджета Джона.

вы генерируете ключ дайджеста, объединяя параметры в строку:url.

mywebsite.com/widget.php?id=1234&action=delete&mac=d5b1ee4b463dc7db3b0eaaa0ea2cb5b4

внутри widget.php. Вы можете использовать ту же формулу для вычисления ключа дайджеста и проверки соответствия.Если они попытаются изменить идентификатор на 4567, результат MD5 будет 09fef3620249f28ae64adc23bded949, поэтому вы можете отклонить запрос.

Если у вас есть более 1 параметра в вашем URI, объедините их вместе, добавьте парольи сгенерировать MD5 или SHA1.

1 голос
/ 31 января 2011

Я думаю, вы можете искать переменные сеанса.

Вы хотите отправить что-то, что не видно из URL, в следующий запрос, верно? Сессия идеально подходит для этого.

Обновление:

Я читаю ваш вопрос как: «На странице есть эта переменная, которая как-то меняется. Я хочу, чтобы пользователь отправил ее на сервер, но она не должна появляться в URL. Но без использования форм».

Нет способа инициировать запрос POST (например, позволить пользователю опубликовать пароль или что-то подобное) из браузера без форм или вызова javascript axaj. Чтобы отправить некоторые данные через POST, вы можете использовать Zend_Http_Client (), но это делается на стороне сервера, и вам все равно нужно сначала сделать запрос GET.

Могу ли я спросить вас, как бы вы реализовали это с помощью GET? Это поможет нам понять, что именно вы хотели бы сделать.

И последняя идея:

Я ищу способ передать параметры от вида до контроллер безопасным способом

ПРОСТО, ПОТОМУ ЧТО ЭТО НЕ В URL, ЭТО НЕ БЕЗОПАСНО! :)

...