Могу ли я использовать динамически созданные поля формы с компонентом безопасности в CakePHP 1.3? - PullRequest
5 голосов
/ 22 сентября 2010

Используя CakePHP 1.3 , у меня есть (рабочая) форма, которая имеет динамически созданные поля формы (через Javascript). Все отлично работает, несколько моделей сохраняются с помощью saveAll (), и это просто прекрасно.

Но я получаю черную дыру в 404 всякий раз, когда включаю компонент безопасности (в надежде получить некоторую автоматическую магическую защиту CSRF).

Я понимаю, что это может быть (вероятно, так!) Вызвано динамически создаваемыми полями формы, как упомянуто в документации.

Есть ли способ заставить их хорошо играть вместе?

1 Ответ

5 голосов
/ 23 сентября 2010

Ты тоже не можешь съесть свой Торт и съесть его.(Ча-чинг!)

Защита CSRF точно означает, что разрешено отправлять только определенный список полей формы.Этот список определяется и фиксируется во время создания формы.Вы не можете быть защищены CSRF и для динамического изменения полей в форме.

Существует два решения:
Если количество и имена динамически создаваемых полей ограничены, создайтевсе они в форме и скрыть их с помощью CSS, а затем показать их с помощью Javascript.Таким образом, вы не создаете поля динамически, а только отображаете их динамически.
Если это не сработает, вы можете добавить в белый список поля, используя параметр $disabledFields (опять же, толькоесли их имена известны заранее) или вообще отключите CSRF с опцией $validatePost.

...