2010-09-22 13 views
5

Usando CakePHP 1.3, tengo un formulario (de trabajo) que ha creado dinámicamente campos de formulario (a través de Javascript). Todo funciona muy bien, varios modelos se guardan a través de saveAll(), y es simplemente hermoso.¿Puedo usar campos de formulario creados dinámicamente con el componente de seguridad en CakePHP 1.3?

Pero, recibo un Black-Holed a un 404 cada vez que habilito el componente de Seguridad (esperando obtener algo de la protección de CSRF auto-mágico).

Entiendo que esto puede ser (¡probablemente lo es!) Causado por los campos de formulario creados dinámicamente, como se menciona en los documentos.

¿Hay alguna manera de hacer que jueguen bien juntos?

Respuesta

5

No puede tener su pastel y comérselo también. (Cha-ching!)

La protección CSRF significa precisamente que solo se permite enviar una cierta lista de campos de formulario. Esta lista se decide y se fija en el momento en que se crea el formulario. No puede estar protegido CSRF y dinámicamente alterar los campos en el formulario.

Hay dos soluciones:
Si el número y los nombres de los campos creados dinámicamente son limitados, créelos todos en el formulario y escóntelos usando CSS, luego muéstrelos usando Javascript. De esta forma, no crea dinámicamente los campos, sino que solo los muestra dinámicamente.
Si eso no funciona, puede incluir en la lista blanca los campos utilizando $disabledFields option (de nuevo, solo si sus nombres se conocen de antemano) o deshabilitar CSRF por completo con la opción $validatePost.

+0

¿utiliza regularmente el componente de seguridad? Me parece que es probable que sea un poco exagerado en el caso más general. Especialmente mientras se desarrolla. ¿Considera que es razonable construir una aplicación sin incluirla y luego activarla para su producción? –

+0

Por lo tanto, para el clásico "hash para la sesión, ponga el hash en la forma, compruebe el hash coincide con la sesión en la publicación del formulario" - si quería seguridad ligeramente más laxa que la que proporciona Cake de forma predeterminada - necesito jugar con la sesión y hacerlo por mi mismo. ¿Derecha? ¡Gracias! –

+1

@Travis Yo diría que si no hay una razón * no * para usarlo, debe usarlo. Sin embargo, si causa más problemas de los que resuelve, no es absolutamente necesario. Depende de cuánta seguridad necesite en su aplicación, el aspecto de CSRF no aleatorio-POSTs-de-extraños puede ser crucial para su aplicación. El aspecto de no-tocar-con-campos-de-formas se puede replicar principalmente mediante una codificación cuidadosa y usando la opción '$ fieldlist' de' Model :: save() '. SecurityComponent es muy útil para configurar rápidamente la autenticación HTTP Basic cuando la necesita. – deceze

Cuestiones relacionadas