Ce qu'est l'usurpation de user-agent
Tout client HTTP peut envoyer un User-Agent en-tête qui se décrit lui-même: un nom et une version de navigateur, un nom de crawler, un identifiant de bibliothèque. L'en-tête est auto-déclaré. Rien dans HTTP ne vérifie qu'il est exact, donc n'importe quel client peut envoyer n'importe quelle valeur. L'usurpation de user-agent consiste à envoyer une valeur qui dénature le client, par exemple:
- un script d'automatisation qui se présente comme un navigateur de bureau récent,
- un scraper qui prétend être un crawler de recherche bien connu pour obtenir un traitement favorable,
- un agent AI qui utilise une chaîne de navigateur générique afin d'être traité comme une personne.
Pourquoi c'est important
De nombreux systèmes prennent encore des décisions à partir de la chaîne user-agent: ajout à une liste autorisée de crawlers connus, diffusion de contenu différent aux bots, ou exclusion de l'automatisation des analytics. Chacune de ces décisions hérite de la faiblesse de l'en-tête. Si une politique dit "autoriser tout ce qui prétend être le crawler X", elle autorise aussi toute personne qui copie la chaîne du crawler X.
Pour les applications qui reçoivent du trafic d'agents AI, cela devient de plus en plus important avec le temps. Les agents fonctionnent de plus en plus dans de vrais navigateurs ou dans des frameworks de navigateur headless, donc leurs chaînes user-agent ressemblent exactement à celles des navigateurs humains. D'autres s'identifient honnêtement. L'en-tête seul ne peut pas vous dire qui est qui. Notre article sur comment savoir si le trafic d'un site web provient d'agents AI examine les signaux qui fonctionnent mieux.
De meilleures preuves que l'en-tête
- Signatures cryptographiques. Avec HTTP Message Signatures et le travail sur Web Bot Auth, un client prouve qu'il détient une clé publiée par l'opérateur qu'il nomme. Une chaîne user-agent copiée ne peut pas reproduire une signature.
- Vérification publiée par l'opérateur. Certains opérateurs de crawlers publient des plages IP ou prennent en charge des vérifications reverse DNS, ce qui rend l'usurpation plus difficile que l'en-tête seul. Google documente une vérification reverse DNS et plage IP pour ses crawlers, Microsoft propose un outil Verify Bingbot, et OpenAI publie des fichiers d'adresses IP pour chacun de ses bots. Les recommandations d'Anthropic pour son agent de navigateur hébergé indiquent clairement que n'importe qui peut envoyer le même en-tête User-Agent et recommandent de vérifier ses adresses IP publiées.
- Vérifications de cohérence. Comparer le client revendiqué avec les détails du protocole et les signaux d'interaction peut montrer qu'une revendication ne correspond pas, même si cela produit une inférence, pas une preuve.
- Identifiants. Pour les API, une clé API ou un token vous indique quel compte appelle, indépendamment de ce que dit l'en-tête.
Idées reçues courantes
- "Un user-agent de navigateur signifie une personne." Les navigateurs headless et les frameworks d'agents envoient régulièrement des chaînes de navigateur.
- "Un user-agent de crawler signifie que c'est le crawler." Sans signature ni contrôle de vérification de l'opérateur, ce n'est qu'une revendication.
- "L'usurpation est toujours malveillante." Certains outils légitimes envoient des chaînes génériques pour éviter de servir des pages cassées. L'usurpation est une raison de relativiser l'en-tête, pas une preuve de mauvaise intention.
Comment Proof of Actor traite la chaîne user-agent
Proof of Actor enregistre une revendication user-agent comme preuve declared: quelque chose que le client a déclaré, qui peut être vrai ou non. Le système ne transforme jamais, à lui seul, une déclaration en preuve verified. Une requête dont la seule preuve d'identification est une chaîne user-agent de crawler est étiquetée en conséquence, et lorsque les preuves sont insuffisantes le résultat est Unknown plutôt qu'une supposition confiante. Vos politiques dans Route peuvent alors traiter différemment un agent signé et vérifié et un agent auto-déclaré, par exemple en autorisant les deux sur les routes en lecture seule mais en appliquant des limites plus strictes à celui qui est déclaré.
Voir comment fonctionnent les bases de preuve ou demander un accès anticipé.
Sources
- RFC 9110: HTTP Semantics, User-Agent: l'en-tête est auto-déclaré par le client
- Google: Verifying Google's crawlers and fetchers: reverse DNS et vérifications de plages IP publiées
- Microsoft Bing: Verify Bingbot tool: vérification qu'une adresse IP appartient à Bingbot
- OpenAI: Overview of OpenAI Crawlers: user agents et fichiers d'adresses IP publiés
- Anthropic: how Anthropic-hosted browsers identify themselves: avertissement selon lequel l'en-tête User-Agent peut être copié