Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,7 @@ path = "examples/soluciones/07-operacion-de-apis.rs"
[[example]]
name = "08-identidad-y-acceso-solucion"
path = "examples/soluciones/08-identidad-y-acceso.rs"

[[example]]
name = "09-seguridad-de-apis-solucion"
path = "examples/soluciones/09-seguridad-de-apis.rs"
11 changes: 11 additions & 0 deletions benches/09-seguridad-de-apis.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Decisión de benchmark: seguridad de APIs

**Estado:** draft

No se agrega benchmark ejecutable. El modelo evalúa una regla de frontera en
memoria; medirla no decide si una API valida suficiente, expone datos de más o
resiste abuso en producción.

Un benchmark será pertinente cuando una defensa real plantee una decisión
reproducible, como el costo de validación de esquemas bajo carga o un límite de
solicitudes frente a tráfico automatizado.
1 change: 1 addition & 0 deletions benches/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ documentadas por capítulo.
- [06. Estilos alternativos](06-estilos-alternativos.md)
- [07. Operación de APIs](07-operacion-de-apis.md)
- [08. Identidad y acceso](08-identidad-y-acceso.md)
- [09. Seguridad de APIs](09-seguridad-de-apis.md)
20 changes: 18 additions & 2 deletions docs/09-seguridad-de-apis.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,10 +126,26 @@ Las pruebas aceptan una frontera sensible con mensaje seguro, rechazan detalles
internos y rechazan entradas extensas. No sustituyen un análisis de amenazas;
protegen la condición mínima que evita exponer una frontera interna.

## Práctica

Los ejercicios están en
[`docs/ejercicios/09-seguridad-de-apis.md`](ejercicios/09-seguridad-de-apis.md)
y la solución ejecutable en
[`examples/soluciones/09-seguridad-de-apis.rs`](../examples/soluciones/09-seguridad-de-apis.rs).
Antes de consultar la solución, identifica qué dato sensible protege la
frontera y qué información nunca debe aparecer en el error público.

## Benchmark

La decisión de benchmark está en
[`benches/09-seguridad-de-apis.md`](../benches/09-seguridad-de-apis.md).
El modelo valida reglas pequeñas en memoria; medirlo no decide una amenaza ni
la eficacia de una defensa en producción.

## Siguiente paso

El siguiente bloque añadirá práctica, solución ejecutable y una decisión de
benchmark. Después el curso cerrará con estrategia de APIs para sistemas reales.
El siguiente capítulo cierra el curso con estrategia de APIs para sistemas
reales.

## Decisiones registradas

Expand Down
23 changes: 23 additions & 0 deletions docs/ejercicios/09-seguridad-de-apis.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Ejercicios: seguridad de APIs

**Estado:** draft

## Ejercicio 1: localizar la frontera

Para una entrada de importe, identifica qué debe validarse antes de ejecutar
la operación, qué detalle no debe regresar al consumidor y qué señal puede
registrarse sin conservar datos sensibles.

## Ejercicio 2: declarar un rechazo seguro

Construye una frontera para `importe` con sensibilidad `Sensitive` y
`SafeMessage`. Explica por qué un detalle interno puede ayudar al atacante aun
cuando el valor de entrada parece válido.

## Ejercicio 3: solución ejecutable

Compila la frontera segura con:

```sh
cargo run --example 09-seguridad-de-apis-solucion
```
1 change: 1 addition & 0 deletions docs/ejercicios/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ después de justificar el diseño propio.
- [06. Estilos alternativos](06-estilos-alternativos.md)
- [07. Operación de APIs](07-operacion-de-apis.md)
- [08. Identidad y acceso](08-identidad-y-acceso.md)
- [09. Seguridad de APIs](09-seguridad-de-apis.md)
17 changes: 17 additions & 0 deletions examples/soluciones/09-seguridad-de-apis.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//! Solución del ejercicio del capítulo 9.

use rust_api_design::security_boundary::{DataSensitivity, ErrorExposure, SecurityBoundary};

fn main() -> Result<(), Box<dyn std::error::Error>> {
let boundary = SecurityBoundary::new(
"importe",
DataSensitivity::Sensitive,
ErrorExposure::SafeMessage,
)?;

println!(
"¿Entrada extensa rechazada? {}",
boundary.rejects(&"x".repeat(129))
);
Ok(())
}
Loading