security - hello - cakephp tutorial
¿CakePHP se ocupa automáticamente de las vulnerabilidades de asignación masiva al guardar datos modificados? (2)
CakePHP tiene una opción de validación incorporada disponible. El formulario genera automáticamente los campos y realiza la validación en función de los criterios de validación que ha mencionado en el modelo. Esta validación se llamará automáticamente antes del método Guardar.
Además, si desea agregar alguna validación personalizada, puede agregar eso en el modelo.
Con su consulta específica, puede eliminar el campo is_admin
del formulario de edición para que el usuario no pueda editarlo. Si desea agregar más seguridad y asegurarse de que el campo is_admin
tenga un valor falso, puede editar su valor en el método de edición de los controladores.
En el método de edición, puede agregar el siguiente código antes de llamar a la acción Guardar.
$this->request->data[''ModelName''][''is_admin] = false;
Editar:
Después de recibir más información de DCoder, la frase que estaba buscando aquí es una "vulnerabilidad de asignación masiva". Es decir, aprovechar la conveniencia de los métodos que guardarían todos los campos válidos en la base de datos, independientemente de su presencia en el formulario inicial (haciéndolos vulnerables a los datos POST manipulados que contienen más campos [posiblemente más críticos] que los previstos) )
Las dos respuestas comunes se denominan apropiadamente listas blancas y listas negras; incluir en la lista blanca campos destinados a la modificación o incluir en la lista negra campos que no deberían modificarse.
Mi pregunta es la siguiente: ¿CakePHP incluye automáticamente en la lista blanca solo esos campos en el formulario de envío, o es necesario para mí (y para otros fanáticos de Cake) tener cuidado de que estemos en la lista blanca o en la lista negra de manera apropiada?
Pregunta Original:Cake ofrece muchas formas excelentes de generar formularios y manejarlos de forma casi automática. Mientras pensaba en la seguridad, me pregunté si Cake sabía qué campos existían en un formulario enviado, o simplemente aceptará un campo válido. Tome el siguiente mensaje si no tengo sentido (y alguien puede editar mi pregunta para que esté mejor redactada si pueden pensar en una mejor manera de expresarla):
Digamos que les permito a mis usuarios editar su perfil. Creo un formulario que tiene campos para nombre de usuario, correo electrónico y contraseña, debajo de la edit
acción.
Un usuario inteligente quiere entrar y cambiar su campo is_admin
de false
a true
, por lo que usa una aplicación como firebug para enviar datos personalizados de la publicación a la acción de edit
, que incluye el campo is_admin
establecido en true
.
La pregunta es, ¿se daría cuenta Cake por sí solo de que is_admin
no estaba en la forma original, o debo tener cuidado de especificar explícitamente los únicos campos que campos puede modificar una acción determinada? hay una manera mas facil?
¡Gracias!
James
Tienes que cargar SecurityComponent
en tu (s) controlador (es) y CakePHP evitará que se altere tu forma, ver http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html#form- sabotaje-prevención