У меня есть несколько форм, которые используют вход CSRF. Например, в конструкторе моей формы это выглядит так:
$this->add(array (
'name' => 'csrf',
'type' => 'Csrf',
'attributes' => array(
'id' => 'csrf'
)
));
Я просто пытался использовать Firebug, чтобы изменить значение токена входных данных CSRF и отправить форму, просто чтобы посмотреть, что произойдет. Результат: он все еще подтвержден. Я даже сбросил данные $ _POST, чтобы подтвердить отправку неверного токена. Более того, я попытался установить тайм-аут на 10 секунд, и произошло то же самое: форма, казалось, игнорировала ввод CSRF и проверяла форму, была ли она в порядке или нет. Код выглядит следующим образом:
$this->add(array (
'name' => 'csrf',
'type' => 'Csrf',
'attributes' => array(
'id' => 'csrf'
),
'options' => array(
'csrf_options' => array(
'timeout' => 10
)
)
));
Я даже попытался добавить фильтр для элемента CSRF во входной фильтр формы, но, опять же, он все еще прошел, когда его чертовски хорошо не должно было быть.
Есть ли что-то еще, что я должен делать здесь, чем я не являюсь? Я не хочу добавлять это в мою форму, если она не собирается ничего делать.
РЕДАКТИРОВАТЬ: Вот ссылка на сайт к коду для моей формы и моего действия контроллера. Обратите внимание, что, хотя метод формы getInputFilter имеет валидаторы для csrf, sex и role, результат без них одинаков.
Прочитав немного документации, я как-то наткнулся на то, что заставило меня задуматься. Поэтому я попытался добавить следующий код в метод getInputFilter:
$inputFilter->add($factory->createInput(
array(
'name' => 'csrf',
'validators' => array (
array(
'name' => 'csrf'
)
)
)));
Назовите меня сумасшедшим, но означает ли это, что метод getInputFilter очищает уже существующие валидаторы для таких элементов, как csrf, select и radio?
Других решений пока нет …