Verifica a los agentes por peticiones firmadas, no por IP ni User-Agent
Verify agents by signed requests, not by IP or User-Agent
Decide cómo tratar el tráfico automatizado a partir de una firma criptográfica que puedas verificar, no de una cadena User-Agent ni de un rango de IP, para que un agente que actúa por un usuario real no se bloquee como si fuera un scraper y un scraper no pueda hacerse pasar por ese agente.
Por qué
La mayoría de los sitios distinguen bots de personas con heurísticas: cadenas User-Agent, reputación de IP, CAPTCHAs, patrones de frecuencia. Mathias Biilmann describe lo que eso provoca en los agentes: todas las heurísticas y barreras construidas para bots tienden a afectar igual a los agentes, y lo comprobó cuando Google desactivó una de sus cuentas al detectar el agente personal que él mismo había conectado a su Gmail y su calendario. Pide estándares reales que permitan a los agentes identificarse como actores legítimos que operan en nombre de alguien. El IETF creó el grupo de trabajo Web Bot Auth para ese problema. Su carta constitutiva señala que los orígenes pueden querer niveles de servicio distintos para el tráfico automatizado y el humano, y que las herramientas actuales (listas de IP permitidas, cadenas User-Agent, claves API compartidas) tienen limitaciones importantes de seguridad, escalabilidad y gestión. Cualquiera puede copiar un User-Agent, y un rango de IP no dice nada cuando el tráfico pasa por infraestructura compartida. La pieza base es la RFC 9421, HTTP Message Signatures, un estándar para firmar componentes de una petición HTTP de forma que un verificador pueda comprobarlos incluso tras pasar por intermediarios. Web Bot Auth la aplica a los bots: el operador publica sus claves públicas en /.well-known/http-message-signatures-directory y firma cada petición; Cloudflare ya verifica estas firmas para bots y agentes verificados. El protocolo sigue siendo un borrador del IETF (draft-ietf-webbotauth-httpsig-protocol-00, septiembre de 2026), así que verifica las firmas donde tu infraestructura lo permita y separa identidad de permiso: una firma verificada te dice quién llama, y tus reglas de acceso siguen decidiendo qué puede hacer.
Haz
Acepta y verifica las peticiones firmadas de agentes, publica qué agentes firmados permites y basa el acceso en la identidad verificada más el comportamiento.
No hagas
Permitir o bloquear agentes solo por su cadena User-Agent o su rango de IP.
Artefacto
GET /products/42 HTTP/1.1
Host: shop.example.com
Signature-Agent: "https://signature-agent.test"
Signature-Input: sig2=("@authority" "signature-agent");created=1735689600;keyid="poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U";alg="ed25519";expires=1735693200;tag="web-bot-auth"
Signature: sig2=:jdq0SqOwHdyHr9+r5jw3iYZH6aNGKijYp/EstF4RQTQdi5N5YYKrD+mCT1HA1nZDsi6nJKuHxUi/5Syp3rLWBA==:
El verificador obtiene la clave pública de https://signature-agent.test/.well-known/http-message-signatures-directory, comprueba la firma y el valor expires, y solo entonces aplica sus reglas para ese agente.
Fuentes
- [01]Mathias Biilmann: My Bot Got Banned for Being a Bot ↗
All the heuristics and roadblocks we've built for bots tend to impact agents equally; we'll need to build real standards to allow agents to identify themselves as actual legitimate actors operating on behalf of someone
- [02]IETF Web Bot Auth (webbotauth) Working Group charter ↗
Origins may wish to differentiate service levels between automated and non-automated traffic. Current solutions (such as IP allowlisting, User-Agent strings, and shared API keys) have significant limitations regarding security, scalability, and manageability
- [03]RFC 9421: HTTP Message Signatures ↗
Describes a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over components of an HTTP message, supporting cases where the message may be transformed by intermediaries before reaching the verifier
- [04]Cloudflare Docs: Web Bot Auth ↗
Web Bot Auth is an authentication method that leverages cryptographic signatures in HTTP messages to verify that a request comes from an automated bot; the bot hosts its public keys at /.well-known/http-message-signatures-directory and signs requests with Signature-Agent, Signature-Input (tag web-bot-auth) and Signature headers