Para validar entradas, ¿qué enfoque es más seguro?
Opciones
- Denylist: bloquear solo los caracteres malos conocidos
- Allowlist: definir la entrada válida y rechazar el resto (Opción correcta)
- No hace falta validar si HTTPS está activado
- Validar solo en el cliente, en el navegador
Respuesta
Allowlist: define cómo es una entrada válida (tipo, longitud, formato) y rechaza todo lo demás
Por qué
Una denylist intenta bloquear lo malo, pero los atacantes siempre encuentran variantes (otras codificaciones, trucos nuevos).
Una allowlist describe exactamente lo aceptable, por ejemplo 'un entero positivo menor que 1000' o 'uno de: small, medium, large', y rechaza todo lo demás.
La validación en el cliente solo mejora la experiencia de usuario; el servidor siempre debe validar (Pydantic lo hace en FastAPI).
Recuerda
Permite solo lo válido; valida en el servidor.