
Tu penses être un fantôme du web avec ton VPN payé en crypto ? Mignon. Tu te connectes depuis la Suède pour mater le catalogue Netflix local, et tu te sens comme un hacker dans un film. Laisse-moi te ramener sur terre. Les sites web, surtout les plus gros (streaming, banques, e-commerce...), ont des tours dans leur sac pour démasquer ton petit manège. Et non, ils ne se contentent pas de vérifier une liste d'IPs connues.
Aujourd'hui, on va décortiquer l'une des techniques les plus élégantes et les plus efficaces pour griller un utilisateur de VPN : le piège du fuseau horaire. C'est une méthode basée sur une logique implacable : ton masque (ton VPN) peut mentir sur ta position, mais ton appareil, lui, est souvent un très mauvais menteur.
La méthode bourrin : les listes noires d'IP
Avant d'entrer dans le vif du sujet, parlons de la méthode la plus évidente : les listes noires. La plupart des adresses IP fournies par les services VPN sont connues. Elles appartiennent à des centres de données (datacenters), pas à des fournisseurs d'accès Internet résidentiels comme Orange ou Free.
Des services comme MaxMind ou IP2Location vendent des bases de données qui classifient les adresses IP. Un site peut simplement vérifier ton IP dans ces listes. Si elle est taguée comme "VPN" ou "Datacenter", c'est grillé. C'est efficace, mais ça demande des mises à jour constantes et ça peut rater les nouveaux serveurs VPN. C'est pour ça que les sites intelligents ne s'arrêtent pas là.
Le piège du fuseau horaire : la logique implacable
C'est ici que ça devient intéressant. Oublie les listes. On va utiliser la logique pure, et JavaScript est notre arme. Le principe est d'une simplicité déconcertante : on va comparer le fuseau horaire de ton adresse IP avec le fuseau horaire de ton système d'exploitation. S'ils ne correspondent pas, il y a un loup.
Décortiquons le raisonnement, étape par étape, avant même de voir une seule ligne de code :
-
Étape 1 : Obtenir l'adresse IP et sa localisation.
On utilise une API externe (comme on l'a vu dans l'article précédent) pour récupérer l'adresse IP publique de l'utilisateur. Mais cette fois, on choisit une API qui nous donne aussi le fuseau horaire associé à cette IP. Par exemple, l'APIipwho.is
peut nous retourner que ton IP123.45.67.89
se trouve à Los Angeles, avec le fuseau horaire"America/Los_Angeles"
. C'est l'information de ton "masque". -
Étape 2 : Interroger l'horloge interne de ton navigateur.
C'est là que la magie opère. JavaScript peut accéder à la configuration de ton système d'exploitation via le navigateur. Avec une simple commande,Intl.DateTimeFormat().resolvedOptions().timeZone
, on obtient le fuseau horaire réel de ton ordinateur. Si tu es à Paris, cette commande retournera"Europe/Paris"
, peu importe où ton VPN prétend être. C'est l'information de ton "vrai toi". -
Étape 3 : La confrontation.
Le script a maintenant deux informations :- Fuseau horaire de l'IP :
"America/Los_Angeles"
- Fuseau horaire du système :
"Europe/Paris"
- Fuseau horaire de l'IP :
Cette méthode est redoutable car il est très facile d'oublier de changer le fuseau horaire de son système quand on active un VPN. Et même si on y pense, le faire manuellement à chaque changement de serveur est une contrainte énorme que peu de gens s'imposent.
Le code : mettre le piège en place
Assez parlé. Voyons comment coder ce petit mouchard. On va créer une fonction qui fait les deux appels (API IP et horloge locale) et qui affiche le verdict.
<div id="vpn-detector">
<h3>Analyse de votre connexion en cours...</h3>
<p id="result">Veuillez patienter.</p>
</div>
async function detectVPN() {
const resultElement = document.getElementById('result');
if (!resultElement) return;
try {
// Étape 1 : Fuseau horaire du navigateur
const browserTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
// Étape 2 : Obtenir fuseau via IP avec ipwho.is
const response = await fetch('https://ipwho.is/');
if (!response.ok) {
throw new Error("Échec de la requête vers l'API IP.");
}
const data = await response.json();
if (!data.success) {
throw new Error(`API IPWho.is a échoué : ${data.message}`);
}
const ipTimezone = data.timezone?.id || 'Inconnu';
let resultHTML = `
<p>🕒 Fuseau navigateur : <b>${browserTimezone}</b></p>
<p>🌍 Fuseau IP (${data.ip}) : <b>${ipTimezone}</b></p>
`;
// Étape 3 : Comparaison
if (browserTimezone === ipTimezone) {
resultHTML += `<p style="color: green; font-weight: bold;">✅ Aucun signe évident de VPN.</p>`;
} else {
resultHTML += `<p style="color: red; font-weight: bold;">⚠️ Incohérence détectée : VPN ou Proxy suspecté.</p>`;
}
resultElement.innerHTML = resultHTML;
} catch (error) {
resultElement.innerHTML = `<p style="color: orange;">❌ Erreur lors de la détection : ${error.message}</p>`;
}
}
window.addEventListener('DOMContentLoaded', detectVPN);
Les autres indices qui te trahissent
Le piège du fuseau horaire est puissant, mais ce n'est pas le seul. Les sites peuvent croiser plusieurs informations pour augmenter leur niveau de confiance :
- Fuites WebRTC : L'API WebRTC, utilisée pour la communication vidéo/audio en direct, a une fâcheuse tendance à révéler ta véritable adresse IP locale (celle de ton réseau domestique, genre 192.168.1.x), même si tu es derrière un VPN. Un script peut facilement détecter cette fuite.
- Incohérences de langue : Ton IP est américaine, ton fuseau horaire est américain, mais la langue de ton navigateur (envoyée dans l'en-tête HTTP `Accept-Language`) est `fr-FR`. C'est un autre drapeau rouge.
- Latence (Ping) : Un script peut mesurer le temps de réponse entre ton navigateur et le serveur. Si tu prétends être à New York mais que la latence est très faible (ce qui suggère que tu es géographiquement proche du serveur qui est, disons, à Paris), c'est suspect.
Conclusion : L'anonymat est un combat
Tu l'as compris, se cacher derrière un VPN n'est pas une cape d'invisibilité. C'est le début d'un jeu du chat et de la souris. Les sites web sont devenus experts dans la détection d'incohérences, et la comparaison des fuseaux horaires est l'une de leurs armes les plus affûtées.
Cela ne veut pas dire que les VPN sont inutiles, loin de là ! Ils restent essentiels pour chiffrer ta connexion, te protéger sur les Wi-Fi publics et contourner certaines restrictions. Mais pour un anonymat quasi total, il faut une discipline de fer : synchroniser son fuseau horaire, sa langue, utiliser des navigateurs configurés pour la vie privée et bloquer les fuites comme WebRTC.