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é.
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_Yorkest une incohérence évidente - Locale vs. langue : une locale
de-DEavecAccept-Language: en-USseul 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.
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égion | Fuseau horaire | Locale | Langues | Coordonnées |
|---|---|---|---|---|
| US Est | America/New_York | en-US | en-US,en | 40.7128,-74.0060 |
| US Ouest | America/Los_Angeles | en-US | en-US,en | 34.0522,-118.2437 |
| Royaume-Uni | Europe/London | en-GB | en-GB,en | 51.5074,-0.1278 |
| Allemagne | Europe/Berlin | de-DE | de-DE,de,en | 52.5200,13.4050 |
| France | Europe/Paris | fr-FR | fr-FR,fr,en | 48.8566,2.3522 |
| Japon | Asia/Tokyo | ja-JP | ja-JP,ja,en | 35.6762,139.6503 |
| Corée du Sud | Asia/Seoul | ko-KR | ko-KR,ko,en | 37.5665,126.9780 |
| Brésil | America/Sao_Paulo | pt-BR | pt-BR,pt,en | -23.5505,-46.6333 |
| Australie | Australia/Sydney | en-AU | en-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 :
- Le fuseau horaire correspond au nom IANA attendu
- Le décalage UTC est correct pour la date actuelle (en tenant compte de l'heure d'été)
- La locale affecte le formatage des nombres et des dates correctement
- Les langues sont dans l'ordre de priorité attendu
- Toutes les valeurs sont géographiquement cohérentes avec l'IP du proxy
Bonnes pratiques
-
Utilisez les noms de fuseaux horaires IANA, pas les décalages UTC.
America/New_Yorkgère correctement l'heure d'été.UTC-5ne le fait pas. -
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. -
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.
-
Gardez la locale et le fuseau horaire dans la même région. Une locale
ja-JPavec un fuseau horaireEurope/Londonest une incohérence évidente. -
Laissez BotBrowser auto-détecter quand possible. Le défaut
autoproduit des résultats cohérents depuis l'IP du proxy sans configuration manuelle. -
Testez le comportement de formatage, pas juste les valeurs API. Vérifiez que
toLocaleDateString()ettoLocaleString()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.
Articles Connexes
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.