Skip to content

HTTP : contourner une restriction par User-Agent

Certains serveurs restreignent l’accès à des ressources selon le navigateur ou le client détecté dans la requête. Cette détection repose sur l’en-tête User-Agent, modifiable librement par le client.

Un User-Agent est une chaîne de texte envoyée dans chaque requête HTTP. Elle identifie le logiciel client : navigateur, version, système d’exploitation, moteur de rendu.

Exemple pour Chrome 120 sur Windows :

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

Décomposé :

SegmentSignification
Mozilla/5.0Token historique présent dans presque tous les User-Agents modernes pour des raisons de compatibilité
(Windows NT 10.0; Win64; x64)Système d’exploitation et architecture
AppleWebKit/537.36Moteur de rendu (WebKit, base de Chromium)
(KHTML, like Gecko)Mention de compatibilité héritée de Gecko (Firefox)
Chrome/120.0.0.0Navigateur et version réels
Safari/537.36Token de compatibilité Safari, présent dans tous les navigateurs Chromium

D’autres exemples courants :

# Firefox sur Linux
Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0
# Safari sur macOS
Mozilla/5.0 (Macintosh; Intel Mac OS X 14_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15
# Googlebot (robot d'indexation Google)
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
# curl par défaut
curl/8.5.0

Un filtrage par User-Agent peut s’appliquer pour :

  • Bloquer les bots et scrapers (détection de curl, python-requests, wget…)
  • Restreindre l’accès à certains navigateurs ou versions
  • Servir un contenu différent selon le type de client (mobile, desktop, bot d’indexation)
  • Donner accès à une interface d’administration uniquement depuis un navigateur interne

L’option -A de curl remplace le User-Agent par défaut :

Terminal window
# Se faire passer pour Chrome sur Windows
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" https://exemple.com/ressource
# Se faire passer pour Firefox sur Linux
curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0" https://exemple.com/ressource
# Se faire passer pour Googlebot pour accéder à du contenu réservé aux moteurs de recherche
curl -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://exemple.com/ressource
# Supprimer complètement le User-Agent
curl -A "" https://exemple.com/ressource

Dans les DevTools du navigateur (F12) → onglet Network conditions (Chrome) ou Paramètres réseau (Firefox) : un champ permet de définir un User-Agent personnalisé sans quitter le navigateur.

Dans Chrome :

  1. Ouvrir les DevTools
  2. Menu trois points → More toolsNetwork conditions
  3. Décocher Use browser default
  4. Saisir le User-Agent souhaité

Via un proxy d’interception (Burp Suite)

Section titled “Via un proxy d’interception (Burp Suite)”

Intercepter la requête et modifier l’en-tête directement dans le proxy avant de la transmettre au serveur :

GET /admin HTTP/1.1
Host: exemple.com
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

Selon le contexte, tester plusieurs catégories de User-Agents :

CatégorieObjectif
Navigateurs desktop courantsContourner un blocage des clients non-navigateurs
Googlebot / BingbotAccéder à du contenu réservé aux robots d’indexation
Navigateurs mobilesAccéder à une interface mobile différente de la desktop
User-Agent vide ou invalideTester le comportement par défaut du serveur
Clients internesSi un pattern est identifiable dans les sources (ex. InternalBrowser/1.0)

Le User-Agent est un en-tête que le client contrôle entièrement. Il ne constitue pas un mécanisme d’authentification ou d’autorisation.

  • Ne pas utiliser le User-Agent comme contrôle d’accès : utiliser des sessions authentifiées, des tokens, ou des certificats clients
  • Si le filtrage par User-Agent sert à bloquer des bots, le compléter avec des mécanismes côté serveur : rate limiting, analyse comportementale, CAPTCHA
  • Pour restreindre l’accès à des interfaces d’administration, utiliser un VPN ou une liste d’IPs autorisées au niveau réseau, pas un contrôle applicatif basé sur des en-têtes HTTP

Le User-Agent est une valeur déclarative : le client annonce ce qu’il est, rien ne le contraint à dire la vérité. Tout filtrage de sécurité qui repose sur cet en-tête peut être contourné en trente secondes avec curl -A.