🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónCómo el framework enlaza campos sin preguntar
5 tareas · 35 min · Principiante
Los frameworks web ahorran trabajo copiando los datos de una petición en un objeto por su nombre. Esa comodidad tiene un precio cuando el objeto tiene propiedades que la persona no debería poder tocar. Gimnasios Pulsoandino te entrega el controlador de su pantalla de perfil, el modelo del socio, el esquema de la tabla, el formulario y un mes de auditoría. Se lee el enlace de campos como quien lo va a corregir.
Objetivo de la sala
Los frameworks web ahorran trabajo copiando los datos de una petición en un objeto por su nombre. Esa comodidad tiene un precio cuando el objeto tiene propiedades que la persona no debería poder tocar. Gimnasios Pulsoandino te entrega el controlador de su pantalla de perfil, el modelo del socio, el esquema de la tabla, el formulario y un mes de auditoría. Se lee el enlace de campos como quien lo va a corregir.Casi todos los frameworks web ofrecen alguna forma de enlace automático: toman los pares nombre-valor de una petición (un formulario o un cuerpo JSON) y los copian en las propiedades de un objeto que se llamen igual. Rails lo llama asignación masiva, Spring y ASP.NET hablan de enlace de datos, y en Laravel basta con pasar un arreglo a create o a update del modelo. Es cómodo: un formulario de diez campos se guarda con una línea.
El supuesto escondido es que solo llegarán los campos que la pantalla muestra. Ese supuesto es falso: la petición la arma el cliente, y cualquiera puede añadirle nombres que el formulario no tiene. Si el objeto destino tiene una propiedad con ese nombre y nada lo impide, el valor se guarda. MITRE cataloga la debilidad como CWE-915 (modificación mal controlada de atributos de un objeto que se determinan en tiempo de ejecución), y el Top 10 de seguridad de APIs de OWASP de 2023 la agrupa, junto con la exposición de datos de más, en la categoría API3:2023 sobre la autorización a nivel de propiedad del objeto.
Responde para continuar
Un formulario de perfil tiene tres campos y el modelo que lo recibe tiene doce columnas sin protección. ¿Qué decide qué columnas se escriben al guardar con enlace automático?
Ver pista de ayuda
El servidor no ve la página; ve la petición.
Abre el laboratorio y lee PerfilController.php y Socio.php en la carpeta pulsoandino-perfil. El controlador quita dos campos que añade el framework y pasa todo lo demás al modelo. El modelo, por su parte, no protege ninguna columna. Cruza eso con esquema-socios.sql, donde cada columna dice qué controla, y con auditoria-perfil.txt, que registra los nombres de campo que llegaron y lo que cambió.
Fíjate en las líneas cuyos nombres recibidos incluyen algo que formulario-perfil.html no tiene.
Responde para continuar
¿Qué socio dejó en cero lo que debía al gimnasio desde la pantalla de perfil? Escribe su código.
Ver pista de ayuda
Busca en la auditoría el cambio de la columna que guarda pesos pendientes.
Un hallazgo de asignación masiva se mide con el registro, no con la sospecha. Cuenta las actualizaciones de perfil cuyo cambio aplicado afecta a una columna que el formulario no muestra. No cuentes las que solo traen los tres campos del formulario, ni la que no cambió nada.
Responde para continuar
¿Cuántas actualizaciones de perfil del registro cambiaron una columna que el formulario no ofrece?
Ver pista de ayuda
Un mismo socio puede aparecer más de una vez; cuenta líneas, no socios.
El comentario del controlador dice que el formato ya lo revisa el formulario. Los atributos required, type="email" y maxlength ayudan a quien llena el formulario de buena fe, pero el servidor recibe la petición tal como llega, venga o no de esa página.
Responde para continuar
¿Qué le falta al razonamiento del comentario sobre la validación?
Ver pista de ayuda
Piensa en quién controla la petición que llega al servidor.
Hay arreglos que tapan el síntoma y arreglos que quitan la causa. La causa aquí es que el controlador entrega al modelo una lista de campos que decide el cliente.
Responde para continuar
¿Qué cambio quita la causa del hallazgo en el perfil de Pulsoandino?
Ver pista de ayuda
Quien decide qué se escribe debe ser el servidor.
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.