Seguridad a fondo · Unidad 20 · Lección 10 de 27
APIs y GraphQL
Revisa permisos de objetos y propiedades, además del coste de trabajo en distintos estilos de API.
Para prepararteAutenticación y accesoHTTP y proxies
Después de esta lección puedes
- separar autorización de objetos, funciones y propiedades
- explicar qué revelan esquemas sin tratarlos como fallos automáticos
- relacionar costes y reintentos con reglas de negocio
Una API web permite que software solicite datos u operaciones. Navegadores, aplicaciones móviles y servicios pueden ser clientes. HTTP y JSON son opciones habituales, pero las API abarcan más que ambos. La decisión de seguridad pertenece al servicio, sea cual sea la interfaz del cliente.
Tres preguntas de permisos
La autorización de objetos determina qué registro puede usar el solicitante. La de funciones determina qué operación puede invocar. La de propiedades establece qué campos puede leer o cambiar. La asignación masiva es una forma de fallo: el enlace automático acepta valores del cliente para estado sensible.
Un campo JSON inesperado no demuestra por sí solo un problema. Importa si el servicio lo acepta, le da significado sensible e incumple la política. Listas, búsquedas, exportaciones y lotes también deben conservar las fronteras entre objetos y organizaciones.
Escenario: el servicio de reservas
Un viajero puede consultar su viaje y modificar una dirección. Un agente de soporte puede emitir ciertos reembolsos según otra política. El servidor controla precio y aprobación; esos campos no se vuelven editables porque el cliente los envíe.
Los reintentos complican el reembolso. Una clave de idempotencia necesita alcance, propietario, duración y relación con la solicitud definidos. Ayuda a evitar duplicados, pero no sustituye autorización ni garantiza ejecución exactamente una vez en cualquier sistema distribuido.
Los esquemas describen, no conceden acceso
OpenAPI describe interfaces HTTP. GraphQL ofrece un modelo tipado con consultas, mutaciones y posibles suscripciones. La introspección es una función del esquema, no una vulnerabilidad por sí misma. Decide qué documentación puede publicarse y aplica permisos independientemente de su visibilidad.
Las comprobaciones GraphQL deben cubrir toda ruta hacia datos sensibles, incluidos campos anidados. Limitar profundidad ayuda, pero una consulta poco profunda puede ser costosa. Considera coste, tamaños de colecciones y lotes, plazos y cancelación, además del número de solicitudes.
Interfaces distintas, principios compartidos
JSON-RPC define llamadas a procedimientos por nombre; no es simplemente otra forma de escribir REST. SOAP y gRPC tienen modelos y herramientas propios. Las preguntas de permisos y fronteras de datos siguen siendo familiares.
La validación de tokens debe considerar emisor, destinatario, propósito y significado confiable de las declaraciones. Un esquema, intermediario API o política CORS no aporta automáticamente todas las reglas de negocio.
Revisa el contrato completo
Documenta clientes, operaciones y campos permitidos, propiedad, sensibilidad, presupuesto de recursos y reintentos. Aceptar páginas grandes invita a revisar límites reales; no demuestra automáticamente una caída. Separa el control ausente observado del impacto sustentado.
Convierte una descripción API en reglas aplicables
El equipo ficticio de reservas entrega este contrato. Un viajero puede leer su reserva y cambiar la dirección de contacto. Un agente de soporte asignado a esa reserva puede solicitar un reembolso. El servidor decide precio y estado de aprobación. Los reembolsos usan una clave de idempotencia limitada al solicitante y a la operación.
| Decisión | Relación requerida |
|---|---|
| Leer reserva | El solicitante es propietario u otra política explícita concede acceso. |
| Cambiar contacto | Actor permitido y solo campos de contacto. |
| Solicitar reembolso | Rol de soporte asignado y estado elegible. |
El contrato distingue recurso, operación y propiedades modificables. Una sesión válida, JSON bien formado y un endpoint documentado son datos útiles, pero no establecen los tres permisos.
PrediceSe reintenta un reembolso sin cambios, con la misma clave y solicitante. ¿Debe la clave considerarse permiso para emitir otro reembolso?
La clave relaciona el reintento con la operación anterior según el contrato. La autorización sigue aplicándose. El servicio debe conservar el tratamiento de duplicados definido y rechazar o tratar una petición cambiada con esa clave según sus reglas documentadas.
El coste también necesita contrato. Supón que una petición puede seleccionar hasta veinte registros y dispone de cincuenta unidades de coste. La estimación aportada es tres unidades por registro. Veinte registros cumplen el límite de cantidad, pero cuestan sesenta unidades y superan el presupuesto. Son unidades ficticias para el ejercicio; una estimación real necesita calibrarse con el trabajo realizado.
Un límite de cantidad de peticiones en la pasarela no expresa el coste de cada campo anidado ni la propiedad de cada reserva. Aplica las reglas en componentes que las comprendan y registra cómo reintentos, fallos parciales y cancelación afectan estado y consumo.
La verificación debe comparar operaciones permitidas con alternativas rechazadas usando registros de prueba aportados. Incluye lotes y exportaciones: una respuesta individual correcta no establece que cada registro de una colección reciba la misma protección.
Términos que viste
Compruébate
Sin reloj ni penalizaciones. Lee cada explicación y vuelve a intentarlo cuando quieras.
Las preguntas de esta lección han cambiado. Tu lectura sigue guardada; repasa las preguntas actualizadas.
-
Un viajero es propietario de una reserva y puede editar su contacto. ¿Qué campos enviados autoriza ese permiso?
Ver la respuesta
Respuesta correcta: Solo los campos permitidos por el contrato de actualización de contacto. La autorización de propiedades limita qué puede cambiar un actor y operación permitidos.
-
Un reintento de reembolso mantiene solicitante, clave y petición. ¿Qué debe regir su tratamiento?
Ver la respuesta
Respuesta correcta: El contrato de duplicados definido, manteniendo la autorización correspondiente. La clave relaciona un reintento con una operación de alcance y duración concretos; no es permiso por sí sola.
-
La API permite veinte registros y cincuenta unidades. A tres unidades por registro, ¿cómo queda una petición de veinte?
Ver la respuesta
Respuesta correcta: Cumple cantidad, pero supera coste: veinte por tres son sesenta. Los límites independientes pueden dar resultados distintos. La cantidad no anula el presupuesto de coste.
-
Un endpoint individual aplica propiedad de reserva. ¿Qué evidencia necesita el de exportación?
Ver la respuesta
Respuesta correcta: Resultados que muestren que cada registro exportado respeta el conjunto permitido según la política de exportación. Las colecciones pueden seguir otra ruta y necesitan evidencia de su selección real.
-
La introspección GraphQL revela nombres de campos. ¿Qué conclusión corresponde?
Ver la respuesta
Respuesta correcta: Describe la interfaz; quedan por revisar divulgación, autorización de campos y coste de operación. La documentación puede ser intencionada mientras la ejecución sigue necesitando controles.
Pruébalo
- EscribeEscribe una tabla de aceptación API para leer reservas, cambiar contacto y solicitar reembolsos. Incluye actor, objeto, campos modificables, estado y reintentos. Calcula el coste de veinte registros e identifica el límite incumplido. Añade un criterio de autorización de lotes. Propón la duración de reintentos y la política de resultados duplicados aún no especificadas, marcándolas como decisiones de diseño.