Identité

Fingerprinting fuseau horaire, locale et langue

Comment les paramètres de fuseau horaire, locale et langue créent des empreintes géographiques, et comment les configurer de manière cohérente pour un contrôle complet de l'identité.

Documentation

Vous préférez la doc produit maintenue ?

Cet article a une page équivalente dans le centre de documentation. Utilisez les docs pour le flux canonique, les flags à jour et la référence durable.

Introduction

Votre navigateur expose des informations géographiques via plusieurs canaux : le fuseau horaire via l'API Intl, la locale via le formatage des nombres et des dates, la langue via navigator.language et l'en-tête Accept-Language, et la géolocalisation via l'API Geolocation. Ces quatre propriétés forment la couche géographique de votre identité de navigateur. Lorsqu'elles ne s'alignent pas les unes avec les autres ou avec votre adresse IP, l'incohérence est visible.

BotBrowser fournit des flags CLI dédiés pour configurer chaque propriété géographique au niveau du moteur. Par défaut, BotBrowser dérive automatiquement tous les paramètres géographiques depuis votre IP de proxy, donc un seul flag --proxy-server produit une identité géographique entièrement cohérente. Cet article couvre le système de détection automatique, les flags de substitution manuelle et les stratégies de configuration pour les workflows multi-régions.

Impact sur la vie privée

Les métadonnées géographiques sont l'un des aspects les plus couramment vérifiés de l'identité du navigateur. Les systèmes de pistage comparent :

  • Géolocalisation IP vs. fuseau horaire : une adresse IP en Allemagne avec un fuseau horaire de America/New_York est une incohérence évidente
  • Locale vs. langue : une locale de-DE avec Accept-Language: en-US seul est inhabituel
  • Langue vs. région IP : une IP japonaise avec uniquement des préférences de langue anglaise peut indiquer une mauvaise configuration
  • Coordonnées de géolocalisation vs. IP : si l'API Geolocation retourne des coordonnées à Tokyo mais que l'IP résout à New York, le conflit est clair

Ces vérifications sont simples et rapides, ce qui en fait un filtre précoce dans tout pipeline de pistage. Obtenir la cohérence géographique est une base nécessaire pour toute configuration de navigation axée sur la vie privée.

La détection géographique automatique de BotBrowser élimine la source la plus courante de ces incohérences : les erreurs de configuration manuelle. Lorsque vous vous connectez via un proxy, BotBrowser détecte l'IP du proxy et dérive automatiquement le fuseau horaire, la locale, la langue et la géolocalisation.

Contexte technique

Comment les navigateurs exposent les informations géographiques

Fuseau horaire : Intl.DateTimeFormat().resolvedOptions().timeZone de JavaScript retourne le nom de fuseau horaire IANA (par ex. America/New_York). La méthode getTimezoneOffset() de l'objet Date retourne le décalage UTC en minutes. Les deux doivent être cohérents entre eux et avec l'emplacement déclaré.

Locale : Intl.NumberFormat().resolvedOptions().locale et Intl.DateTimeFormat().resolvedOptions().locale révèlent la locale de formatage du navigateur. Cela affecte le formatage des nombres (virgule vs. point pour les décimales), le formatage des dates (JJ/MM vs. MM/JJ) et le formatage des devises.

Langue : navigator.language retourne la langue principale, et navigator.languages retourne la liste complète des langues préférées. L'en-tête HTTP Accept-Language envoie ces préférences avec chaque requête.

Géolocalisation : l'API navigator.geolocation.getCurrentPosition() retourne des coordonnées de type GPS. Cela nécessite la permission de l'utilisateur, mais lorsqu'elle est accordée, les coordonnées doivent être plausibles étant donné l'IP et le fuseau horaire.

La chaîne de cohérence

Ces signaux forment une chaîne qui doit être cohérente en interne :

Adresse IP → Pays → Fuseau horaire → Locale → Langues → Géolocalisation

Chaque étape doit logiquement découler de la précédente. Une IP de proxy au Japon devrait produire :

  • Fuseau horaire : Asia/Tokyo
  • Locale : ja-JP
  • Langues : ja-JP,ja,en
  • Géolocalisation : coordonnées au Japon (si interrogé)

Briser n'importe quel maillon de cette chaîne crée une incohérence détectable.

Heure d'été et décalages UTC

La configuration du fuseau horaire doit tenir compte de l'heure d'été (DST). Utiliser des décalages UTC comme UTC-5 au lieu de noms de fuseaux horaires IANA comme America/New_York échoue lorsque les transitions DST se produisent. America/New_York est UTC-5 en hiver et UTC-4 en été. Un décalage UTC fixe ne gère pas cette transition, créant une incohérence saisonnière qui révèle que le fuseau horaire a été configuré manuellement.

BotBrowser utilise les noms de fuseaux horaires IANA en interne, garantissant un comportement DST correct tout au long de l'année.

Chaîne de cohérence de l'identité géographique IP Proxy 203.0.113.1 Fuseau horaire Asia/Tokyo Locale ja-JP Langues ja-JP, ja, en Géolocalisation 35.67, 139.65 BotBrowser dérive tout depuis l'IP du proxy Substituez n'importe quelle propriété avec les flags --bot-config-* si nécessaire

L'approche de BotBrowser

Détection géographique automatique

Par défaut, BotBrowser dérive automatiquement tous les paramètres géographiques depuis l'IP du proxy :

chrome --bot-profile="/path/to/profile.enc" \
       --proxy-server=socks5://user:pass@jp-proxy:1080

BotBrowser détecte l'IP japonaise et configure automatiquement :

  • Fuseau horaire : Asia/Tokyo
  • Locale : ja-JP
  • Langues : ja-JP,ja,en
  • Géolocalisation : coordonnées approximées depuis l'IP

Aucun flag supplémentaire n'est nécessaire. Le comportement auto est le défaut pour tous les paramètres géographiques.

Flags de substitution manuelle

Lorsque vous avez besoin de paramètres géographiques spécifiques, quatre flags CLI fournissent un contrôle complet :

--bot-config-timezone (ENT Tier1) : définit le fuseau horaire IANA.

--bot-config-timezone=America/New_York    # Fuseau horaire spécifique
--bot-config-timezone=auto                # Dériver depuis l'IP (défaut)
--bot-config-timezone=real                # Utiliser le fuseau horaire système

--bot-config-locale (ENT Tier1) : définit la locale du navigateur.

--bot-config-locale=en-US    # Locale spécifique
--bot-config-locale=auto     # Dériver depuis l'IP/langue (défaut)

--bot-config-languages (ENT Tier1) : définit les préférences de langue.

--bot-config-languages=en-US,en          # Langues spécifiques
--bot-config-languages=auto              # Dériver depuis l'IP (défaut)

--bot-config-location (ENT Tier1) : définit les coordonnées de géolocalisation.

--bot-config-location=40.7128,-74.0060   # Coordonnées spécifiques
--bot-config-location=auto               # Dériver depuis l'IP (défaut)
--bot-config-location=real               # Utiliser le GPS système

Configuration et utilisation

Configuration géographique complète (CLI)

chrome --bot-profile="/path/to/profile.enc" \
       --proxy-server=socks5://user:pass@us-east.proxy:1080 \
       --bot-config-timezone=America/New_York \
       --bot-config-locale=en-US \
       --bot-config-languages=en-US,en \
       --bot-config-location=40.7128,-74.0060

Configurations régionales courantes

RégionFuseau horaireLocaleLanguesCoordonnées
US EstAmerica/New_Yorken-USen-US,en40.7128,-74.0060
US OuestAmerica/Los_Angelesen-USen-US,en34.0522,-118.2437
Royaume-UniEurope/Londonen-GBen-GB,en51.5074,-0.1278
AllemagneEurope/Berlinde-DEde-DE,de,en52.5200,13.4050
FranceEurope/Parisfr-FRfr-FR,fr,en48.8566,2.3522
JaponAsia/Tokyoja-JPja-JP,ja,en35.6762,139.6503
Corée du SudAsia/Seoulko-KRko-KR,ko,en37.5665,126.9780
BrésilAmerica/Sao_Paulopt-BRpt-BR,pt,en-23.5505,-46.6333
AustralieAustralia/Sydneyen-AUen-AU,en-33.8688,151.2093

Intégration Playwright

const { chromium } = require('playwright-core');

(async () => {
  const browser = await chromium.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args: [
      '--bot-profile=/path/to/profile.enc',
      '--proxy-server=socks5://user:pass@us-east.proxy:1080',
      '--bot-config-timezone=America/New_York',
      '--bot-config-locale=en-US',
      '--bot-config-languages=en-US,en',
      '--bot-config-location=40.7128,-74.0060',
    ],
    headless: true,
  });

  const context = await browser.newContext();
  const page = await context.newPage();

  const tz = await page.evaluate(() =>
    Intl.DateTimeFormat().resolvedOptions().timeZone
  );
  const langs = await page.evaluate(() => navigator.languages);
  const locale = await page.evaluate(() =>
    Intl.NumberFormat().resolvedOptions().locale
  );

  console.log('Timezone:', tz);     // America/New_York
  console.log('Languages:', langs); // ['en-US', 'en']
  console.log('Locale:', locale);   // en-US

  await browser.close();
})();

Vérification

Après la configuration des paramètres géographiques, vérifiez toutes les propriétés :

const page = await context.newPage();

const tz = await page.evaluate(() =>
  Intl.DateTimeFormat().resolvedOptions().timeZone
);
const offset = await page.evaluate(() => new Date().getTimezoneOffset());
const locale = await page.evaluate(() =>
  Intl.NumberFormat().resolvedOptions().locale
);
const lang = await page.evaluate(() => navigator.language);
const langs = await page.evaluate(() => navigator.languages);
const dateFormat = await page.evaluate(() =>
  new Date().toLocaleDateString()
);
const numFormat = await page.evaluate(() =>
  (1234567.89).toLocaleString()
);

console.log('Timezone:', tz);
console.log('Offset:', offset);
console.log('Locale:', locale);
console.log('Language:', lang);
console.log('Languages:', langs);
console.log('Date format:', dateFormat);
console.log('Number format:', numFormat);

Confirmez que :

  1. Le fuseau horaire correspond au nom IANA attendu
  2. Le décalage UTC est correct pour la date actuelle (en tenant compte de l'heure d'été)
  3. La locale affecte le formatage des nombres et des dates correctement
  4. Les langues sont dans l'ordre de priorité attendu
  5. Toutes les valeurs sont géographiquement cohérentes avec l'IP du proxy

Bonnes pratiques

  1. Utilisez les noms de fuseaux horaires IANA, pas les décalages UTC. America/New_York gère correctement l'heure d'été. UTC-5 ne le fait pas.

  2. Définissez les langues par ordre de priorité. Un utilisateur en Allemagne aurait typiquement de-DE,de,en. Inclure l'anglais comme langue secondaire est réaliste pour la plupart des régions.

  3. Faites correspondre la géolocalisation à la ville du proxy, pas à une adresse postale. La précision au niveau de la ville est suffisante et plus réaliste que des coordonnées exactes.

  4. Gardez la locale et le fuseau horaire dans la même région. Une locale ja-JP avec un fuseau horaire Europe/London est une incohérence évidente.

  5. Laissez BotBrowser auto-détecter quand possible. Le défaut auto produit des résultats cohérents depuis l'IP du proxy sans configuration manuelle.

  6. Testez le comportement de formatage, pas juste les valeurs API. Vérifiez que toLocaleDateString() et toLocaleString() produisent des formats appropriés pour la région.

Questions fréquentes

BotBrowser gère-t-il correctement les transitions d'heure d'été ? Oui. BotBrowser utilise les noms de fuseaux horaires IANA en interne, qui encodent les règles DST. Date.getTimezoneOffset() retourne le décalage correct pour n'importe quelle date, y compris les transitions.

Puis-je définir le fuseau horaire par contexte dans Playwright ? L'option timezoneId de Playwright par contexte change le comportement JavaScript Intl. Le flag --bot-config-timezone de BotBrowser définit le fuseau horaire au niveau du moteur. Les deux approches fonctionnent, mais le flag BotBrowser garantit aussi la cohérence au niveau HTTP.

Que se passe-t-il si j'utilise la détection automatique sans proxy ? Sans proxy, BotBrowser utilise votre vraie IP publique pour la détection automatique. Les paramètres géographiques correspondront à votre emplacement réel.

L'en-tête Accept-Language se met-il à jour quand je définis --bot-config-languages ? Oui. L'en-tête Accept-Language sur chaque requête HTTP reflète la liste de langues configurée, y compris les valeurs de qualité (q-values) appropriées pour l'ordonnancement des priorités.

Résumé

Le fuseau horaire, la locale, la langue et la géolocalisation forment la couche géographique de votre identité de navigateur. BotBrowser dérive automatiquement tous les paramètres géographiques depuis votre IP de proxy par défaut, produisant une identité cohérente sans configuration manuelle. Pour des exigences spécifiques, les flags --bot-config-timezone, --bot-config-locale, --bot-config-languages et --bot-config-location fournissent un contrôle complet au niveau du moteur.

Pour la configuration proxy, voir Proxy Configuration. Pour l'identité du navigateur, voir Browser Brand Switching et User Agent Control and Client Hints. Pour les workflows multi-régions, voir Multi-Account Browser Isolation.

#Timezone#Locale#Language#Identity#Geolocation

Faites passer BotBrowser de la recherche à la production

Utilisez ces guides pour comprendre le modèle, puis passez à la validation multi-plateforme, aux contextes isolés et au déploiement navigateur prêt pour l'échelle.