Aller au contenu
StartPrivate
Menu
Langue : FR

Comment vérifier que vos fichiers restent sur votre appareil

Inutile de nous croire sur parole. Votre navigateur peut vous montrer chaque requête qu’une page envoie, et il suffit d’environ deux minutes pour regarder.

Dans les outils de développement du navigateur, ouvrez l’onglet Réseau, videz-le, puis choisissez et traitez un fichier : la liste ne doit montrer aucune nouvelle requête qui emporte votre fichier, ni rien qui parte vers un autre site web. Les seules requêtes visibles viennent du chargement de la page, des composants que vous avez demandés (modèles et fichiers WebAssembly servis par ce site) et du script de mesure d’audience de Cloudflare.

Pourquoi vérifier

Chaque page de ce site affirme que chaque fichier est traité sur place, dans le navigateur, sans être envoyé. C’est une affirmation, et en matière de vie privée, les affirmations ne coûtent rien. Le code source du site n’est pas publié ; plutôt que de vous demander de le lire, cette page vous montre comment observer ce que fait réellement la page. Les navigateurs enregistrent chaque requête réseau qu’une page émet, et ils laissent n’importe qui consulter cet enregistrement.

La vérification dans Chrome ou Edge

  1. Ouvrez la page de l’outil que vous voulez tester, par exemple celle qui supprime les métadonnées d’une photo.
  2. Ouvrez les outils de développement avec Ctrl+Maj+I sous Windows et Linux ou Cmd+Option+I sur Mac (ou F12), puis cliquez sur l’onglet Réseau.
  3. Cochez Conserver le journal pour que la liste ne soit pas effacée si la page change, puis cliquez sur le bouton d’effacement (un cercle barré) pour vider la liste.
  4. Choisissez un fichier dans l’outil et laissez-le terminer. Appuyez sur les boutons dont l’outil a besoin, comme Lancer ou Exporter, et téléchargez le résultat.
  5. Examinez la liste. Dans le champ de filtre, tapez method:POST pour n’afficher que les requêtes qui envoient des données, puis -domain:startprivate.com pour n’afficher que les requêtes vers d’autres sites. Aucun des deux filtres ne doit faire apparaître quoi que ce soit survenu pendant le traitement de votre fichier.

La vérification dans Firefox

  1. Ouvrez la page de l’outil.
  2. Appuyez sur Ctrl+Maj+E sous Windows et Linux ou Cmd+Option+E sur Mac pour ouvrir directement le Moniteur réseau.
  3. Dans le menu des paramètres du panneau (l’icône d’engrenage), activez Conserver les journaux, puis cliquez sur l’icône de corbeille pour vider la liste.
  4. Choisissez et traitez un fichier, puis téléchargez le résultat.
  5. Lisez la liste. Le champ de filtre accepte le même genre de filtres, par exemple method:POST, et un clic sur une ligne montre où la requête est allée et ce qu’elle transportait.

La vérification dans Safari sur Mac

  1. Choisissez Safari → Réglages, ouvrez Avancés et cochez Afficher les fonctionnalités pour les développeurs web. Un menu Développement apparaît.
  2. Ouvrez la page de l’outil, puis choisissez Développement → Afficher l’inspecteur web (Option-Commande-I) et cliquez sur l’onglet Réseau.
  3. Videz la liste avec le bouton en forme de corbeille.
  4. Choisissez et traitez un fichier, puis téléchargez le résultat.
  5. Parcourez les nouvelles lignes, s’il y en a, et cliquez sur l’une d’elles pour voir son adresse et sa méthode.

Sur iPhone ou iPad, Safari n’a pas d’onglet Réseau à lui. Vous pouvez activer Inspecteur web dans les réglages de Safari de l’appareil, sous Avancé, relier l’appareil à un Mac avec un câble, puis inspecter son onglet depuis le menu Développement du Mac. Chrome sur Android s’inspecte de la même façon depuis Chrome sur ordinateur, à l’adresse chrome://inspect.

Ce que vous verrez, et ce que cela signifie

Au chargement de la page : la page elle-même, une feuille de style, quelques fichiers de script sous /assets/, parfois un petit fichier de langue, des icônes et le manifeste de l’application. Tout cela vient de startprivate.com. Vous verrez aussi le script de mesure d’audience servi par static.cloudflareinsights.com.

Quand vous appuyez sur un bouton qui a besoin d’un composant : une série de requêtes GET vers startprivate.com pour des fichiers de programme et des modèles, par exemple sous /v/ et /assets/. C’est le détecteur de visages (environ 1 Mo), le lecteur de texte, le lecteur d’identifiants de contenu (C2PA, « Content Credentials », environ 8,6 Mo), la bibliothèque Office ou les listes de mots des générateurs de mots de passe qui se téléchargent. Ce sont des fichiers qui arrivent chez vous, pas votre fichier qui s’en va. Cliquez sur l’une de ces lignes : vous verrez une requête GET dont le corps est vide.

Pendant que votre fichier est choisi et traité : rien de nouveau qui quitte votre appareil. Vous verrez peut-être des entrées dont l’adresse commence par blob: ou data:. Ce sont des adresses internes à votre propre navigateur, utilisées pour les aperçus et les téléchargements ; elles n’atteignent jamais le réseau.

La mesure d’audience : Cloudflare Web Analytics envoie un petit rapport au chargement de la page, puis de nouveau quand la page est masquée ou fermée ; passer à un autre onglet peut donc ajouter une ligne. Selon la façon dont le site est servi, ce rapport part vers /cdn-cgi/rum sur ce site ou vers cloudflareinsights.com. Cliquez dessus et ouvrez sa charge utile : elle contient des mesures de temps de chargement et l’adresse de la page, pas le contenu de vos fichiers. Si vous le bloquez avec un bloqueur de contenu, les outils fonctionnent exactement de la même manière.

Une exception voulue : sur la page qui évalue la solidité d’un mot de passe, cocher Vérifier les fuites de données connues envoie une requête GET à api.pwnedpasswords.com avec 5 caractères d’une empreinte. Cette option est désactivée par défaut, et aucune autre page n’a le droit de se connecter ailleurs qu’à ce site et à l’adresse de mesure d’audience.

Une seconde ligne de défense : la politique de sécurité

Chaque page est envoyée avec un en-tête Content-Security-Policy. Entre autres choses, il indique au navigateur que la page ne peut se connecter qu’à ce site et à l’adresse de mesure d’audience de Cloudflare, et ne peut charger de scripts que depuis ce site, plus le script de mesure d’audience. Si du code de la page essayait d’envoyer des données ailleurs, le navigateur lui-même le bloquerait et inscrirait une erreur dans la console. Vous pouvez lire cette politique dans l’onglet Réseau : cliquez sur la première ligne (la page), puis cherchez content-security-policy sous En-têtes de réponse. Sur la page d’évaluation des mots de passe, vous y trouverez une adresse supplémentaire, celle de la liste des fuites.

Les scripts et les styles de chaque page portent aussi des empreintes Subresource Integrity : le navigateur refuse d’exécuter un fichier qui ne correspond pas à la version que la page attend.

Comment fonctionne chaque type d’outil

Photos (JPEG, PNG, WebP, HEIC). Les métadonnées sont retirées au niveau de l’octet. L’outil parcourt les segments, blocs ou boîtes du fichier, écarte ceux qui contiennent l’EXIF, le GPS, le XMP, l’IPTC, les notes du fabricant, les identifiants de contenu, les commentaires et les vignettes intégrées, et recopie les données d’image sans les changer. L’image n’est jamais décodée ni réencodée : elle reste identique pixel pour pixel. L’indicateur d’orientation et le profil colorimétrique sont conservés pour que la photo s’affiche toujours correctement. Le profil reste tel qu’il est, courts textes compris (une description, une ligne de copyright, parfois le nom d’un appareil ou de la personne qui a créé le profil) : le résultat le nomme parmi ce qui reste, et la visionneuse EXIF affiche ces textes. En mode Localisation seulement, le bloc EXIF est modifié là où il se trouve, et seulement si l’outil peut le lire en entier : les entrées d’une liste fixe (dates, appareil, réglages, numéros de série, noms du propriétaire et de l’auteur) restent quand elles contiennent ce qu’une telle entrée doit contenir ; toute autre entrée est supprimée, de même qu’une entrée prévue par la liste mais enregistrée sous un type ou avec un nombre de valeurs différents de ceux qu’elle attend, ou qu’un nombre conservé qui épelle trois lettres d’un nom ; et un bloc impossible à lire jusqu’au bout est retiré en entier. Ce contrôle des nombres ne porte que sur des champs numériques, les nombres EXIF que ce mode conserve et les nombres d’un profil colorimétrique (conservé dans les deux modes) ; les appareils photo et les téléphones n’y écrivent pas de noms, seul un fichier fabriqué exprès le ferait. Il repère les lettres latines, grecques et cyrilliques écrites en octets simples, en UTF-8 ou en caractères sur 16 bits, y compris les accents écrits comme signes séparés ; une lettre accentuée stockée sur un seul octet, ainsi que les autres écritures, dont le chinois, ne peuvent pas être distinguées de nombres. Dans un profil colorimétrique, la taille du profil et le nombre de points d’une courbe ne sont pas lus comme des lettres quand ils concordent avec la structure du profil et restent dans ce qu’emploient les vrais profils (1 Mo, 64 balises, 4 096 points de courbe) ; un profil qui en sort est listé comme contenant des données qu’un profil standard ne porte pas. Les champs de texte comme l’auteur ou le copyright relèvent d’une autre règle, décrite plus bas sous « Appareil et noms en mode Localisation seulement ». Les données qu’un JPEG garde derrière son image principale, comme une carte de gain Ultra HDR ou la vidéo d’une photo animée, sont toujours retirées. Les fichiers que l’outil ne peut pas parcourir d’un bout à l’autre sont refusés d’emblée, de même que les types qu’il ne couvre pas : JPEG à codage arithmétique et JPEG hiérarchiques, séquences d’images HEIC, AVIF animés et HEIC comportant des boîtes inconnues.

Vidéo (MP4, MOV). Parmi les pistes, seules la vidéo et l’audio sont conservées. Les autres pistes (télémétrie GPS et capteurs, timecode, données propres à la caméra, et pistes de sous-titres sauf si vous choisissez de les garder) sont remplies de zéros et marquées comme espace libre, les boîtes de métadonnées comme udta, meta et uuid sont vidées, et les heures de création et de modification sont mises à zéro. Une boîte uuid reste : la boîte de vidéo sphérique de Google dans la piste d’une vidéo à 360°, qui contient la projection et le nom du logiciel d’assemblage, et dont les lecteurs ont besoin pour afficher la vidéo en 360° ; elle est listée comme restant dans le fichier. Parmi les réglages de codec des pistes conservées, un champ est vidé quand une piste d’image est codée en H.264, H.265 ou ProRes : l’endroit de sa description où un encodeur inscrit son propre nom (un fichier GoPro y porte « GoPro AVC encoder »), sauf si cet endroit ne contient que le nom du format de codage. Les autres codages gardent ce champ. Le reste n’est pas modifié et peut encore nommer l’encodeur ; le résultat cite chacun de ces noms avec son texte. La longueur du fichier ne change pas, l’image et le son ne sont pas réencodés, et la copie est assemblée à partir de tranches de votre original et de petits correctifs : des fichiers de plusieurs gigaoctets se traitent ainsi sans être chargés en mémoire.

Fichiers Office (DOCX, XLSX, PPTX). Ce sont des archives zip de fichiers XML, décompressées dans un processus d’arrière-plan et traitées en deux étapes distinctes. Le nettoyeur passe en premier. Il retire les propriétés d’auteur et de société, les commentaires et leurs auteurs, les propriétés personnalisées, le texte masqué, les identifiants de session d’édition, les traces de coédition, les balises de compléments, les réglages de publipostage et de publication web et les données d’étiquette de confidentialité, et il traite les modifications suivies en les acceptant ou en masquant leurs auteurs (à vous de choisir). Les chemins de dossiers sont réduits au nom du fichier partout où une valeur est à coup sûr l’emplacement d’un fichier : la cible d’un lien, une description d’image formée d’un chemin seul, le fichier qu’un champ Word doit aller chercher (pas le reste du texte d’un code de champ), et l’endroit d’une formule Excel qui nomme un autre classeur (pas le texte tapé entre guillemets). Un chemin trouvé ailleurs est laissé tel qu’il est écrit et listé dans le résultat. Un cas échappe aux deux : un emplacement qu’une formule assemble à partir de morceaux de texte séparés ne peut pas être reconnu comme chemin, et seul est listé un fragment qui, pris isolément, a l’air d’un chemin. Certains éléments sont gardés exprès : les signatures numériques, les champs du texte qui affichent l’auteur ou le nom du fichier, les connexions de données, les données de compléments, les adresses e-mail derrière les liens et les liens qui pointent vers des adresses d’un réseau privé. La seconde étape est un contrôle indépendant du fichier terminé. Il ne partage aucune liste avec le nettoyeur, et il compare le résultat, partie par partie et attribut par attribut, aux définitions publiées du format (les données de schéma livrées avec l’Open XML SDK de Microsoft). Une partie, un élément ou un attribut ne compte comme vérifié que si les définitions le connaissent et qu’il est trouvé propre. Tout le reste, y compris les éléments gardés exprès et toute partie ou tout balisage que l’outil ne reconnaît pas, est listé en haut du résultat avec le nom de la partie qui le contient, au lieu d’une déclaration selon laquelle le fichier serait propre. En dernier lieu, les noms, les initiales et les identifiants de compte lus dans le fichier d’origine sont recherchés dans chaque partie du fichier nettoyé, et ceux qui y réapparaissent sont listés eux aussi. Si un nom enregistré dans les propriétés du fichier (l’auteur, la personne qui a enregistré le fichier en dernier, celle qui a écrit un commentaire, etc.) figure aussi dans le texte même du document, il est listé parmi les avertissements, que ce texte soit affiché ou masqué ; à vous de vérifier et de décider si le nom reste. Quelques cas donnent lieu à une simple remarque au lieu d’un avertissement : du texte du contenu qui se lit comme un chemin de dossiers, une adresse interne ou un compte (voir les limites ci-dessous) ; et un nom enregistré qui n’a pas pu être recherché, soit parce qu’il ne compte qu’une ou deux lettres ou chiffres, soit parce que la partie du fichier d’origine qui le contenait n’a pas pu être lue. Une partie compte comme non lue quand un lecteur XML conforme la refuse, même si des noms y ont été trouvés ; de même pour une partie qui comporte une déclaration de type de document, ou dont l’encodage déclaré n’est ni UTF-8, ni UTF-16, ni windows-1252, ni ISO-8859-1, ni US-ASCII. Une poignée de mots par défaut comme « User » ne sont pas recherchés du tout ; la section Limites ci-dessous les nomme. Les parties sont décompressées une à une, dans des limites fixes (64 Mo pour une partie ou une image, 256 Mo pour l’ensemble des parties texte, 512 Mo pour tout le contenu du paquet, images et parties non ouvertes comprises, un million de morceaux de XML dans une partie, où comptent chaque élément, chaque commentaire et chaque bout de texte situé entre deux balises, 512 niveaux d’imbrication, 2 048 pour une partie parcourue d’une traite, 2 000 attributs sur un même élément et 10 000 entrées dans le paquet) : un fichier construit pour épuiser la mémoire est refusé, pas traité. Un tableau avant/après liste ce qui a changé. Les photos intégrées (JPEG, PNG, WebP, HEIC) passent par le nettoyeur de photos ; toute autre image intégrée, tout fichier multimédia et tout objet ne sont pas ouverts et sont signalés comme laissés dans le fichier.

Lecteur d’identifiants de contenu. La page vérifie d’abord, sur l’appareil, si un fichier contient des données C2PA. Ce n’est qu’ensuite qu’elle charge le lecteur, configuré pour ne récupérer ni manifestes distants, ni état de révocation, ni listes de confiance. C’est pourquoi il indique si une signature est intacte, et non si le signataire est digne de confiance.

Masquage. L’éditeur dessine une copie de travail sur un canevas, limitée à environ 2 048 pixels de côté, et garde les cadres dans les coordonnées de l’original. L’export repeint l’image en pleine taille avec les caches et encode un nouveau fichier dans un processus d’arrière-plan : c’est pour cela qu’aucune métadonnée ne suit. Si le navigateur ne parvient pas à encoder la pleine taille, il réessaie à 4 096 pixels. Le détecteur de visages est le modèle YuNet exécuté avec TensorFlow.js Web ; le détecteur de texte associe le moteur de reconnaissance de caractères Tesseract, des règles de motifs et le lecteur de codes-barres ZXing.

Mots de passe et phrases de passe. Tout l’aléa vient de crypto.getRandomValues, fourni par le navigateur, avec un échantillonnage par rejet qui donne à chaque caractère ou à chaque mot la même probabilité. Rien de ce qui est généré n’est conservé ni envoyé.

Empreintes de fichiers. Les fichiers sont lus par tranches de 8 Mio dans un processus d’arrière-plan et transmis aux implémentations SHA-2, SHA-1 et MD5 de hash-wasm.

Chiffrement de texte. AES-256-GCM, fourni par l’API Web Crypto du navigateur, avec des clés dérivées des mots de passe par l’Argon2id de hash-wasm (64 Mio, 3 passes).

Solidité des mots de passe. zxcvbn-ts note le mot de passe dans la page ; la vérification des fuites décrite plus haut est la seule partie capable d’émettre une requête.

Limites

Ces outils retirent ce qu’ils reconnaissent et listent ce qu’ils gardent. Un résultat qui ne liste rien signifie donc « rien de ce que vérifie cet outil n’a été trouvé », jamais « ce fichier ne dit rien de vous ». Voici ce que les outils ne font pas.

Comment le site est testé

Avant d’être publiée, chaque version passe par :

Ce que votre navigateur révèle de lui-même

Cette page parle de fichiers. Votre navigateur dit aussi certaines choses sur vous à chaque site web, du seul fait de s’y connecter : votre adresse IP, votre localisation approximative, votre langue ou la taille de votre écran, par exemple. Pour voir ce que votre navigateur révèle aux sites web, vous pouvez faire une vérification séparée.

Sources (en anglais)

Vérifié le 11 octobre 2026.

Dernière mise à jour :