Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Respuestas que exponen propiedades internas

5 tareas · 40 min · Principiante

La otra mitad del problema va en sentido contrario: la API devuelve el objeto entero y confía en que la pantalla muestre solo lo debido. Un entrenador de Pulsoandino recibió un mensaje en su número personal, que nunca dio en el gimnasio. Te entregan las rutas de la API, dos controladores, los modelos y las respuestas guardadas desde el navegador de una cuenta de pruebas.

0 de 5 · 0%

Objetivo de la sala

La otra mitad del problema va en sentido contrario: la API devuelve el objeto entero y confía en que la pantalla muestre solo lo debido. Un entrenador de Pulsoandino recibió un mensaje en su número personal, que nunca dio en el gimnasio. Te entregan las rutas de la API, dos controladores, los modelos y las respuestas guardadas desde el navegador de una cuenta de pruebas.

Cuando un controlador devuelve el modelo tal cual, el framework lo convierte a JSON con todas sus columnas, salvo las que el modelo excluya. La aplicación luego pinta tres o cuatro de esos campos, y el equipo cree que el resto «no se ve». Pero la respuesta completa llega al dispositivo de quien pregunta: cualquiera la lee en las herramientas de desarrollo del navegador o en el tráfico de su propio teléfono.

El Top 10 de seguridad de APIs de OWASP de 2019 lo llamaba exposición excesiva de datos; la edición de 2023 lo unió con la asignación masiva en API3:2023, porque los dos son la misma pregunta hecha en dos direcciones: qué propiedades de este objeto puede ver o cambiar esta persona. MITRE tiene para la exposición, entre otras, CWE-213 (información sensible expuesta porque las políticas no coinciden), que su propia ficha marca como en estudio para retirarse por solaparse con otras; antes de etiquetar con ella, compara con la entrada de exposición de datos personales.

Responde para continuar

Un equipo dice que la respuesta de una API trae campos sensibles, pero que la app no los pinta. ¿Por qué eso no es un control?

Ver pista de ayuda

Piensa dónde termina la respuesta, no lo que se dibuja con ella.

Abre el laboratorio, entra en la carpeta pulsoandino-respuestas y lee EntrenadorController.php y Entrenador.php. El modelo usa una lista negada para la salida: excluye la clave y el token de recordar sesión, y deja salir todo lo demás. Después abre respuesta-entrenadores.json.

Responde para continuar

¿Qué campo de la respuesta de entrenadores lleva un dato de nómina?

Ver pista de ayuda

Busca un valor en pesos dentro del objeto del entrenador.

Compara la respuesta con pantalla-entrenadores.txt, que dice qué campos usa la app. Lo que la app no usa es lo que la respuesta no debería traer.

Responde para continuar

¿Cuántos campos de cada entrenador devuelve la API que la pantalla no usa?

Ver pista de ayuda

Cuenta los campos del objeto y resta los que la pantalla enumera.

La exposición pesa más cuando la ruta no pide sesión: entonces la respuesta la puede leer cualquiera. Cruza rutas-api.txt con las respuestas guardadas y busca qué ruta sin middleware de autenticación anida al socio completo.

Responde para continuar

¿Qué ruta que no pide sesión devuelve la fecha de nacimiento de los socios? Escríbela sin el método.

Ver pista de ayuda

El objeto socio aparece anidado dentro de cada puesto.

En la carpeta hay un ejemplo que ya está bien: PerfilResource.php construye la respuesta del perfil con los campos elegidos uno por uno, y respuesta-perfil.json muestra el resultado. Es la lista de permitidos aplicada a la salida.

Responde para continuar

¿Qué arreglo de la respuesta de entrenadores no vuelve a fallar cuando se añada otra columna al modelo?

Ver pista de ayuda

Es el mismo razonamiento de la lista de permitidos, ahora en la salida.

Inicia sesión para registrar tus puntos y progreso en el ranking.

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