Skip to content

6. Desarrollo seguro

Temas del programa: 3.4

Validar entradas

Nada de fuera se usa sin validar

Gestionar errores

Detalle en el servidor y lo mínimo al cliente

Mínimo privilegio

Solo los permisos necesarios

Y una idea que los une — defensa en profundidad varias barreras independientes para que una falla no sea suficiente

// Mal: confía en todo lo que manda el cliente
Prestamo::create($request->all());
// Bien: solo lo validado y la identidad desde el token
$service->crear([
...$request->validated(),
'user_id' => $request->user()->id,
]);

Con la primera línea basta enviar “user_id”: 1 para reservar a nombre de otra persona

STD-SEC-12 y STD-SEC-11

Gestionar errores — fallar de forma segura

Section titled “Gestionar errores — fallar de forma segura”
Revela

El correo no existe · La contraseña es incorrecta

No revela

CREDENCIALES_INVALIDAS para ambos casos

Falla abierta

Si no pude verificar el permiso dejo pasar

Falla cerrada

Si no pude verificar el permiso respondo 403

QuiénDemasiadoSuficiente
La app en PostgreSQLUsuario postgres superusuarioUsuario reservafic dueño solo de sus bases
Un estudiantePuede registrar equiposSolo crea y ve sus préstamos
El pipelineVariables visibles en cualquier ramaVariables protegidas y enmascaradas
Petición
│ auth:sanctum ¿quién eres? → 401
│ Form Request ¿los datos tienen sentido? → 422
│ Policy ¿puedes hacer esto? → 403
│ Service ¿respeta la regla? → 409
▼ PostgreSQL FK · NOT NULL · CHECK → rechaza

Si alguien se salta la API con tinker o un seeder la base de datos sigue defendiéndose

Autenticación

Token de Sanctum que expira · falla con 401

Autorización

Policy por rol y por dueño · falla con 403

¿Ana puede cancelar el préstamo 42?
¿es administradora? → sí puede
¿el préstamo es de Ana? → sí puede
en otro caso → 403
public function view(User $usuario, Prestamo $prestamo): bool
{
return $usuario->esAdministrador()
|| $usuario->id === (int) $prestamo->user_id;
}
Gate::authorize('view', $prestamo);

Si llegó autenticado puede hacer todo es el error más frecuente

Este tema se practica en el Laboratorio 4 — Desarrollo seguro.

Continúa con 7. Gestión de secretos.