privacy

Privacy outils

Ce qu'un site apprend réellement de votre IP publique, de vos en-têtes de requête et du matériel lisible en JavaScript — et comment expurger fichiers HAR, URL et jetons avant de les partager.

3 outils

§01 GUIDE DU DOMAINE

Trois observateurs, trois couches de données

Au moment où votre JavaScript s’exécute, le site en sait déjà beaucoup. La couche transport lui a remis l’adresse IP publique par laquelle vous êtes sorti, et de cette seule adresse : l’ASN qui annonce le préfixe, une estimation géographique grossière, la version HTTP négociée et la version TLS que votre client a proposée. Rien de cela n’est optionnel, rien n’implique de cookie, et chaque proxy inverse du chemin en journalise l’essentiel par défaut. Vérifier IP montre ce que votre propre connexion expose — IP, ville, région, pays, FAI, ASN, fuseau horaire, le PoP de périphérie qui a terminé la requête, le protocole HTTP et TLS.

La deuxième couche est ce que le navigateur fournit spontanément dans les en-têtes de requête : User-Agent, Accept-Language, Accept-Encoding, Referer et les indices client Sec-CH-UA-*. Peu coûteux à collecter, journalisés partout, et — contrairement à la couche réseau — déclaratifs, donc aussi trivialement falsifiables. La troisième couche est ce que le script mesure après le chargement : screen.width et devicePixelRatio, Intl.DateTimeFormat().resolvedOptions().timeZone, navigator.hardwareConcurrency, navigator.deviceMemory, maxTouchPoints, plus les artefacts de rendu issus de <canvas>, de WebGL, d’AudioContext et du sondage des polices. Empreinte du Navigateur lit cette couche localement, jusqu’à une signature de rendu canvas.

Le modèle mental qui compte : aucune valeur isolée n’a besoin d’être secrète. Votre fuseau horaire est une information publique. L’empreinte travaille sur la distribution conjointe — une valeur partagée par un utilisateur sur 2^k apporte k bits d’entropie, et les bits s’accumulent, environ 33 bits séparant une personne de 8,6 milliards. Les signaux corrélés ajoutent moins que la somme de leurs parties (platform: MacIntel et un agent utilisateur Macintosh sont presque le même bit), si bien que les chiffres publiés par attribut ne s’additionnent jamais simplement. Panopticlick a mesuré environ 10,0 bits pour le User-Agent, 6,09 pour les en-têtes Accept, 4,83 pour la résolution d’écran plus la profondeur de couleur et 3,04 pour le fuseau horaire ; les ~18,1 bits souvent cités étaient la moyenne pour une empreinte entière dans cette étude, dominée par l’énumération des plugins (15,4 bits) et des polices (13,9 bits) que les navigateurs modernes ont largement fermée — et comme les valeurs d’en-têtes et d’écran se recouvrent, elles ne peuvent pas se combiner au-delà de cette moyenne d’empreinte entière. Des travaux ultérieurs sur une population bien plus large (Gomez-Boix et al., 2 millions d’empreintes) ont trouvé les navigateurs ordinaires encore moins uniques. La leçon porte sur le mécanisme plutôt que sur un nombre cible : une douzaine d’attributs banals suffisent à garder un visiteur qui revient reconnaissable, sans aucun cookie.

Deux conséquences que les ingénieurs prennent à l’envers : l’adresse IP est l’identifiant le plus durable de la pile et l’un des signaux de localisation les plus faibles ; et l’entropie est symétrique, si bien que falsifier une valeur vers quelque chose d’inhabituel vous rend plus identifiable. Un User-Agent se réclamant d’un iPhone à côté d’un écran 3440×1440, de 16 cœurs de processeur et de maxTouchPoints: 0 est une empreinte à un seul exemplaire.

Référence des signaux

SignalObservateurEntropie approx.Stabilité
IP publiqueRéseau, avant JSÉlevée, partagée avec les pairs derrière le NATChange selon le réseau / le VPN
ASN + organisationRéseau, avant JS~5–10 bitsStable par FAI
Accept-LanguageEn-tête de requête~5–8 bitsTrès stable
User-Agent, Sec-CH-UA-*En-tête + JS~10 bits, en diminutionStable jusqu’à la mise à jour du navigateur
Fuseau horaireJS~3–5 bits (~400 zones IANA)Voyage avec vous, pas avec l’IP
Écran + devicePixelRatioJS~5–8 bitsChange quand vous branchez un moniteur
Cœurs de processeur (hardwareConcurrency)JS~2–3 bitsFixe par machine ; un compte brut, non regroupé (6, 10, 12, 20 sont tous courants)
Mémoire de l’appareil (deviceMemory)JS~1–2 bitsFixe ; regroupée en 0,25/0,5/1/2/4/8 Go et plafonnée à 8
Rendu canvasJS~8 bitsTrès stable par GPU + pilote
Chaîne du moteur de rendu WebGLJS~10 bits ou plusTrès stable
Énumération des policesJSÉlevée sur ordinateur de bureauStable par installation
Identifiant en cookie / localStorageAttribué par le serveurUnique par conceptionJusqu’à ce que l’utilisateur l’efface

Les chiffres sont des estimations d’ordre de grandeur issues d’études de population publiées, pas une mesure de votre navigateur : un signal vaut plus de bits dans une population diverse et moins dans une population homogène. Notez que la dernière ligne est le seul identifiant qu’un utilisateur peut supprimer — tout ce qui est au-dessus se régénère à la visite suivante.

Ce qui part avec l’artefact

La plupart des fuites réelles ne sont pas du pistage. C’est un artefact de débogage collé dans un ticket.

ArtefactCe que le destinataire obtientChamps qui le portent
Export HARUne session fonctionnelle, plus chaque corps de réponse que cet onglet pouvait lireCookie, Set-Cookie, Authorization, x-api-key, ?token=, postData.text, content.text
Une URL dans un ticketL’identité du compte, et un accès qui continue de fonctionner jusqu’à expiration?session=, ?sig=, X-Amz-Signature, paramètres de suivi contenant un courriel haché
Un JWT dans un rapport de bugQui est l’utilisateur et ce qu’il peut faire — aucune clé nécessaire pour le liresub, email, tenant, roles, exp
En-têtes de courriel bruts, .emlLe vrai chemin de l’expéditeur et votre topologie interneReceived: (hôte from, IP d’origine), X-Originating-IP, noms d’hôtes internes en by
Une ligne de journal dans un ticketL’IP réelle de l’utilisateur, avec le modèle d’appareil et la version du systèmeX-Forwarded-For, remote_addr, jetons de modèle du User-Agent (SM-G991B, Build/…)
Capture d’écran de DevToolsQuel que soit le panneau ouvert, en pixels qu’aucun détecteur de secrets n’attraperaNetwork → corps de la réponse, Application → colonne Value des cookies

Quel outil pour quelle question

« Sur quelle adresse suis-je en ce moment ? » est la seule question à laquelle on ne peut pas répondre localement : seul un point de terminaison distant voit l’adresse par laquelle vous sortez, raison pour laquelle Vérifier IP interroge api.sitekits.dev (métadonnées renvoyées en écho, rien de conservé). ifconfig vous donne une adresse de réseau local, pas celle dont votre liste d’autorisation de pare-feu a besoin. « Que peut lire un script sur cette machine ? » est le cas inverse, entièrement local : Empreinte du Navigateur couvre les lignes d’en-têtes, d’écran et de matériel, plus une signature canvas tronquée, mais n’énumère ni les polices, ni WebGL, ni l’audio — lisez-la comme une aide à l’inspection, pas comme un score d’unicité. Saisissez plutôt le Parseur UserAgent quand vous disposez d’une chaîne UA issue d’un journal et d’aucun navigateur en direct.

Utilisez En-têtes HTTP pour auditer ce qu’une origine dit de votre confidentialité : Referrer-Policy décide de la part de l’URL transmise à des tiers, les attributs de Set-Cookie décident de la durée de survie d’un identifiant attribué. Le chargement est côté serveur : vous obtenez donc les en-têtes bruts de l’origine sans le bruit du navigateur — les en-têtes seulement, jamais le corps.

Pour acheminer le tableau ci-dessus : passez un export HAR par le Nettoyeur HAR avant qu’il ne quitte votre machine — il remplace les en-têtes correspondants, les jetons de chaîne de requête et les deux corps par [REDACTED] et rapporte combien de valeurs il a touchées — puis ouvrez la copie assainie dans la Visionneuse HAR pour confirmer que les temps et les codes de statut dont vous aviez besoin ont survécu ; ce couplage est traité dans le guide HAR. Développez un lien suspect avec le Parseur d’URL avant de le coller, décodez un jeton capturé avec le Décodeur JWT pour voir exactement quelles revendications vous transmettriez, et passez un bloc d’en-têtes brut dans Analyse d’En-têtes pour voir la chaîne Received: que vous êtes sur le point de publier. Ces quatre outils s’exécutent dans la page et ne téléversent rien. Une capture d’écran n’a pas cette option : recadrez-la, car flouter n’est pas expurger. L’hygiène des jetons au sens large relève de l’ outillage sécurité et de /fr/for/security/.

Pièges

Prendre la géolocalisation pour une position

Le champ city indique où le préfixe est enregistré. Les opérateurs mobiles font atterrir des régions entières sur un seul enregistrement, et un ASN de centre de données portant une ville d’apparence résidentielle est une contradiction à investiguer plutôt qu’à croire.

N’expurger que les champs que vous voyez

L’expurgation par motifs compare à une liste fixe de noms d’en-têtes et à des noms de paramètres contenant token|key|secret|password|passwd|pwd|auth|session|sig|signature. Un secret dans un segment de chemin d’URL (/v1/reset/9f3a…) ou sous un nom propre à la maison est manqué. Parcourez la sortie assainie avant de la joindre.

Oublier que l’URL elle-même est une donnée

Les chaînes de requête atterrissent dans les en-têtes Referer, les journaux d’accès des CDN, l’historique du navigateur et les chaînes d’analytique. C’est pourquoi les URL signées expirent, et pourquoi une donnée personnelle ne devrait jamais être un paramètre de requête. Analysez avant de coller.

Supposer qu’un client HTTP côté navigateur est neutre

Le Testeur REST API envoie les requêtes depuis votre navigateur droit vers l’URL que vous saisissez — aucun serveur sitekits sur le chemin. Bon pour la confidentialité, mais la cible voit donc votre IP réelle, votre User-Agent et tout identifiant que vous collez dans la zone des en-têtes. Utilisez un jeton jetable quand le point de terminaison n’est pas le vôtre.

FAQ
Qu'est-ce que mon adresse IP indique à un site, au-delà d'une ville approximative ?
Elle identifie surtout un réseau plutôt qu'une personne. Le préfixe porte un ASN et l'organisation qui l'annonce, ce qui est ce qui distingue un FAI résidentiel d'un opérateur mobile, d'une sortie d'entreprise, d'une région cloud ou d'un fournisseur de VPN — une lecture bien plus fiable que le champ ville. La connexion ajoute ce qu'aucun script n'a à fournir : la version HTTP négociée, la version TLS que votre client a proposée, et le PoP de périphérie qui a terminé la requête. Comme le NAT à l'échelle de l'opérateur place des milliers d'abonnés derrière une seule adresse, une IP étiquette une population plutôt qu'un utilisateur ; ce qui est véritablement informatif est une contradiction, par exemple un ASN de centre de données présentant une ville d'apparence résidentielle, ou un fuseau horaire JavaScript en désaccord avec le pays que l'adresse implique. Vérifier IP montre les mêmes champs que voit n'importe quel serveur.
Un VPN empêche-t-il l'empreinte de navigateur ?
Non. Un VPN ne change que la couche réseau — votre signature de rendu canvas, la géométrie de l'écran, le jeu de polices, le fuseau horaire et les compteurs matériels restent inchangés : un visiteur qui revient reste donc reconnaissable. Pire, un fuseau horaire JavaScript en désaccord avec le pays déduit de l'IP est en soi un signal fiable de VPN.
Combien de bits d'entropie rendent un navigateur unique ?
Environ 33 bits isolent une personne parmi à peu près 8,6 milliards, puisque 2^33 vaut environ 8,6e9. Une valeur partagée par un utilisateur sur 2^k apporte k bits, et des signaux corrélés ajoutent moins que la somme de leurs parties. Les ~18,1 bits souvent cités ne sont pas un chiffre d'en-têtes et d'écran — c'était la moyenne de Panopticlick pour une empreinte entière, dominée par l'énumération des plugins (15,4 bits) et des polices (13,9 bits) que les navigateurs modernes ont largement fermée. Les en-têtes et les données d'écran seuls se situent bien en dessous (environ 10,0 bits pour le User-Agent, 6,09 pour les en-têtes Accept, 4,83 pour la résolution d'écran plus la profondeur de couleur) et ils se recouvrent, on ne peut donc pas les additionner jusqu'à ce total.
Que fuit-il quand je colle une URL dans un ticket ?
Davantage que la page qu'elle désigne. Les chaînes de requête portent des identifiants de session, des signatures d'URL signées qui continuent de fonctionner jusqu'à leur expiration, et des paramètres de suivi contenant un courriel haché — et elles sont recopiées dans les en-têtes Referer envoyés à des tiers, dans les journaux d'accès des CDN, dans l'historique du navigateur et dans les chaînes d'analytique. C'est le Referrer-Policy de l'origine qui décide de la part de cette URL transmise, pas vous. Développez un lien avant de le coller, et gardez toute donnée personnelle hors des paramètres de requête.
Quels outils sitekits envoient mes données à un serveur, et lesquels restent dans le navigateur ?
Presque tous restent dans le navigateur — Empreinte du Navigateur, Nettoyeur et Visionneuse HAR, Décodeur JWT, Parseur d'URL, Parseur UserAgent, Analyse d'En-têtes et chaque formateur ou convertisseur analysent localement ce que vous collez : cela ne quitte jamais la page. Trois appellent api.sitekits.dev, parce que la réponse n'est visible que depuis l'extérieur de votre machine : Vérifier IP (l'adresse par laquelle vous sortez), DNS Lookup (le nom de domaine) et En-têtes HTTP (l'URL). Chacune de ces saisies sert à cette seule requête et n'est jamais conservée, et le vérificateur d'en-têtes ne renvoie que le statut et les en-têtes — il ne récupère jamais le corps de la réponse. Testeur REST API est le seul cas externe : les requêtes partent de votre navigateur droit vers l'URL que vous saisissez, sans serveur sitekits sur le chemin, si bien que c'est la cible, et non ce site, qui voit votre IP réelle et tout identifiant que vous collez. Chaque page d'outil porte une pastille local / server / external indiquant lequel des trois s'applique.