Проверка хеш-кода Zend CSRF выполняется автоматически? - PullRequest
2 голосов
/ 21 февраля 2012

Я добавил следующий код в форму входа

$csrf = $this->createElement('hash', 'csrf', array('salt' => 'unique'));

И в действии контроллера у меня есть

if (!$admin_login_form->isValid($_POST)) {
    //Throw Error
}else{
    // Redirect to index
}

Теперь Вопрос в том, что Zend выполняет автоматическую проверку хеш-кода, или мы должны что-то кодировать вручную, чтобы проверить это?

1 Ответ

5 голосов
/ 21 февраля 2012

Ответ - нет. Вам не нужно ничего проверять, действителен ли хеш или нет.

Когда вы создаете элемент Zend_Form_Element_Hash, он автоматически добавляетВалидатор (используя Zend_Validate_Identical) для вашей формы и зарегистрируйте свой хэш в новом сеансе пространства имен.

После этого, как только вы вызовете метод isValid(), если CSRF, сохраненный в сеансе при визуализации страницы,не совпадает с отправленным в последнем запросе, идентичный валидатор завершится ошибкой и выдаст ошибку.

Редактировать: Кроме того, вы можете добавить соль в свой элемент и хешгенерируется в соответствии со следующим шифрованием: md5(mt_rand(1,1000000) . $this->getSalt() . $this->getName() . mt_rand(1,1000000).

Чтобы ответить на ваш второй вопрос в вашем комментарии, два элемента не вызовут конфликтов сеанса, поскольку пространство имен, используемое для хранения хеша, определяется по трем критериям:

  1. Имя класса
  2. Соль
  3. Имя элемента

Например, ваш элемент, вероятно, будет храниться в этом пространстве имен: " Zend_Form_Element_Hash_unique_ hash ", где "unique" - это солт-значение и хэш-имя элемента.

...