6. Desarrollo seguro
Temas del programa: 3.4
Principios antes que herramientas
Section titled “Principios antes que herramientas”Nada de fuera se usa sin validar
Detalle en el servidor y lo mínimo al cliente
Solo los permisos necesarios
Y una idea que los une — defensa en profundidad varias barreras independientes para que una falla no sea suficiente
Validar entradas — en la práctica
Section titled “Validar entradas — en la práctica”// Mal: confía en todo lo que manda el clientePrestamo::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”El correo no existe · La contraseña es incorrecta
CREDENCIALES_INVALIDAS para ambos casos
Si no pude verificar el permiso dejo pasar
Si no pude verificar el permiso respondo 403
Mínimo privilegio — en la práctica
Section titled “Mínimo privilegio — en la práctica”| Quién | Demasiado | Suficiente |
|---|---|---|
| La app en PostgreSQL | Usuario postgres superusuario | Usuario reservafic dueño solo de sus bases |
| Un estudiante | Puede registrar equipos | Solo crea y ve sus préstamos |
| El pipeline | Variables visibles en cualquier rama | Variables protegidas y enmascaradas |
Defensa en profundidad en ReservaFIC
Section titled “Defensa en profundidad en ReservaFIC”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 → rechazaSi alguien se salta la API con tinker o un seeder la base de datos sigue defendiéndose
Quién eres y qué puedes hacer
Section titled “Quién eres y qué puedes hacer”Token de Sanctum que expira · falla con 401
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 → 403Una Policy
Section titled “Una Policy”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
Relación con el laboratorio
Section titled “Relación con el laboratorio”Este tema se practica en el Laboratorio 4 — Desarrollo seguro.
Qué sigue
Section titled “Qué sigue”Continúa con 7. Gestión de secretos.

