Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Paginación y tamaños máximos de respuesta

5 tareas · 35 min · Principiante

Un límite de frecuencia cuenta peticiones, pero una sola petición puede pedir diez filas o cien mil. Lo que la aplicación acepta en cada una —cuántas filas devuelve, qué tamaño de cuerpo recibe, cuántos elementos trae una lista— es la otra mitad del consumo. En Agromercado Guanentá la API dejó de responder unos minutos una mañana y nadie sabe por qué. Te entregan tres controladores, las reglas de validación de una importación, la configuración de tamaños y el registro de respuestas de esa mañana.

0 de 5 · 0%

Objetivo de la sala

Un límite de frecuencia cuenta peticiones, pero una sola petición puede pedir diez filas o cien mil. Lo que la aplicación acepta en cada una —cuántas filas devuelve, qué tamaño de cuerpo recibe, cuántos elementos trae una lista— es la otra mitad del consumo. En Agromercado Guanentá la API dejó de responder unos minutos una mañana y nadie sabe por qué. Te entregan tres controladores, las reglas de validación de una importación, la configuración de tamaños y el registro de respuestas de esa mañana.

Paginar es partir un resultado grande en trozos, y casi todas las APIs dejan que el cliente diga de qué tamaño quiere el trozo. Eso está bien mientras el servidor ponga un techo: si el parámetro llega sin máximo, una sola petición puede obligar a la base de datos a leer, ordenar y serializar todo, y a la red a llevarlo. El Top 10 de seguridad de APIs de OWASP de 2023 nombra esto en API4:2023 con una indicación clara: los parámetros que controlan cuántos registros se devuelven se validan en el servidor.

Un techo escrito en la documentación, o aplicado por la web y la app porque construyen la petición con un valor razonable, no protege nada: quien llama a la API directamente no pasa por ninguna de las dos.

Responde para continuar

¿Dónde tiene que aplicarse el máximo de filas por página para que proteja de verdad?

Ver pista de ayuda

Pregúntate qué pasa con quien no usa ni la web ni la app.

Abre el laboratorio y lee los tres controladores de la carpeta guanenta-paginas. Uno pone un techo al tamaño de página, otro lo toma tal como llega y el tercero no pagina. Luego abre registro-respuestas.txt: la columna de petición dice cuánto se pidió y la de filas, cuánto se devolvió. Donde el controlador recorta, las dos no coinciden.

Responde para continuar

¿Qué cuenta pidió la página más grande del registro?

Ver pista de ayuda

Compara el valor del parámetro de tamaño en cada petición, no las filas devueltas.

En notas-equipo.txt el equipo afirma un techo general para todas las listas. Un hallazgo de este tipo se escribe midiendo esa afirmación contra la evidencia, no contra el código de una sola ruta. Cuenta las respuestas del registro que devolvieron más filas que ese techo, en cualquier ruta. Las que terminaron en 504 no devolvieron nada: la pasarela cortó a los 30 segundos, y entre ellas hay una petición pequeña de otra cuenta que solo tuvo la mala suerte de llegar en ese momento.

Responde para continuar

¿Cuántas respuestas del registro devolvieron más filas que el máximo que el equipo dice aplicar en toda la API?

Ver pista de ayuda

Recorre la columna de filas devueltas; una de las que cuentan no es de pedidos.

El consumo no es solo lo que sale. Lo que la aplicación recibe ocupa memoria al leerse, tiempo al validarse y espacio al guardarse, y cada parte tiene su techo: el tamaño total del cuerpo, que suele fijarse en el servidor web o en la pasarela; la longitud de cada texto; y el número de elementos de cada lista. API4:2023 los enumera junto con el tamaño de los archivos que se suben. MITRE agrupa la falta de cualquiera de ellos en CWE-770, asignación de recursos sin límites ni regulación.

Lee ImportarPreciosRequest.php y servidor.conf. Fíjate en qué campos llevan un tope de longitud o de valor y en cuál no lleva ninguno, y compara el tamaño de cuerpo permitido con la lista más larga que el equipo dice haber recibido de verdad.

Responde para continuar

En las reglas de validación de la importación de precios, ¿qué campo es una lista sin número máximo de elementos? Escríbelo tal como aparece.

Ver pista de ayuda

Busca la regla `array` que no va acompañada de un tope.

El equipo de Guanentá propone subir el tiempo de espera de la pasarela «para que las listas grandes alcancen a salir». Es tratar el síntoma: el 504 era lo único que estaba protegiendo al resto de clientes de una consulta sin techo. El arreglo pone el techo donde se decide el trabajo, en el servidor, y deja al cliente que de verdad necesita todo un camino pensado para eso, como una exportación en segundo plano.

Responde para continuar

¿Qué conjunto de cambios cierra lo que encontraste en Guanentá?

Ver pista de ayuda

Busca la opción que actúa sobre las tres causas, no sobre el síntoma ni sobre un cliente.

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