Français

Images et photos · Outil de confidentialité des métadonnées d'image

Comment un navigateur lit EXIF à partir d'un JPEG sans le télécharger

· Comment ça marche

exif image-confidentialité traitement du navigateur formats de fichiers

Une photographie devenant des octets locaux, des segments JPEG et des champs EXIF lisibles dans un seul navigateur
Illustration vectorielle originale de ToolAcre

Une présentation pas à pas de ce qui se passe réellement entre le dépôt d'un JPEG sur la page et la visualisation de ses métadonnées : les octets sont lus localement, le segment APP1 est localisé et les répertoires TIFF qu'il contient sont décodés en JavaScript, sans aucun serveur impliqué.

L'affirmation de tester : « rien n'est téléchargé » – pourquoi un inspecteur de métadonnées n'a besoin que de lire les octets dont il dispose déjà et comment confirmer qu'aucune demande ne quitte l'onglet

L'affirmation selon laquelle une photographie n'est pas téléchargée est testable plutôt que décorative. L'outil lit le fichier sélectionné dans un ArrayBuffer, le convertit en octets et transmet ces octets directement au lecteur de métadonnées. Sa déclaration de confidentialité limite soigneusement la promesse : la photographie est analysée dans l'onglet du navigateur, aucune copie n'est stockée et les demandes d'analyse divulguées sont distinctes du chemin de code qui gère le fichier.

Lecture du fichier localement avec l'API File - comment le navigateur transmet à l'outil un ArrayBuffer de votre photo sans que les octets ne quittent l'appareil

Un sélecteur de fichiers fournit un objet File du navigateur et file.arrayBuffer() rend son contenu disponible au JavaScript déjà exécuté dans la page. ToolAcre applique un plafond 50 MB, puis identifie JPEG, PNG ou WebP à partir des octets eux-mêmes. Cette lecture locale ne nécessite pas de soumission de formulaire ni de point final de téléchargement d'image, et le test d'isolation du réseau exerce les trois formats pris en charge sans enregistrer de requête.

Recherche du segment APP1 — parcourir les marqueurs JPEG du SOI à l'en-tête « Exif » et ignorer les segments qui portent ICC ou XMP à la place

Pour JPEG, le lecteur démarre après le marqueur de début d'image et parcourt les segments de marqueur jusqu'au marqueur de début de numérisation. Il reconnaît les charges utiles APP1 commençant par Exif et les analyse, tandis que XMP est détecté uniquement pour la suppression et ICC est délibérément conservé comme données de rendu. Tout, à partir du marqueur de numérisation, appartient au chemin de l'image compressée plutôt qu'au rapport EXIF.

Décodage de l'en-tête TIFF et des IFD – ordre des octets (II ou MM), le décalage vers IFD0 et les entrées 12-byte qui pointent vers les sous-répertoires Exif et GPS

Une charge utile EXIF contient un bloc TIFF. L'analyseur lit le marqueur d'ordre des octets II ou MM, vérifie la valeur magique TIFF et suit le décalage vers IFD0. Chaque entrée de répertoire fournit une balise, un type, un nombre et soit une valeur en ligne, soit un décalage. À partir d'IFD0, le code suit uniquement les pointeurs des sous-répertoires Exif et GPS, gardant le parcours limité au lieu de poursuivre toutes les structures privées possibles.

Transformer les valeurs brutes des balises en champs lisibles : ID de balise, types de données, rationnels et chaînes ASCII, et pourquoi certaines valeurs nécessitent une table de recherche

Les valeurs brutes ne deviennent utiles qu'une fois leurs types et balises interprétés. Les champs ASCII deviennent des chaînes, les types numériques utilisent l'ordre des octets TIFF et les paires rationnelles deviennent des nombres après la lecture du numérateur et du dénominateur. Un dictionnaire de balises étiquette la marque, le modèle, les horodatages, les logiciels, les champs de série et les valeurs GPS de l'appareil photo, puis classe l'emplacement et l'identité de l'appareil avant les champs techniques moins sensibles.

Exemple concret : une photo de téléphone analysée sur le fil de discussion principal

Le classeur décrit cet exemple comme étant exécuté dans un Web Worker, mais le panneau fourni appelle readMetadata directement après avoir attendu file.arrayBuffer(); aucun travailleur ne participe à ce chemin. Un téléphone sélectionné JPEG est donc lu et analysé sur le fil principal de la page, après quoi toutes les latitudes et longitudes sont imprimées sous forme de nombres et la table de champs complète est rendue. La correction est importante car la transformation locale et la transformation par les travailleurs sont des affirmations différentes.

Ce que ceci ne couvre pas : les éléments internes de MakerNote, les formats RAW, HEIC et les conteneurs vidéo sont en dehors de cette procédure pas à pas et en dehors de l'outil

Le lecteur est intentionnellement incomplet. Il ne décode pas les éléments internes de MakerNote, les champs de vignettes IFD1, les contenus JPEG XMP ou les conteneurs RAW, HEIC, AVIF, TIFF, GIF et SVG non pris en charge. Un segment EXIF ​​corrompu est ignoré afin qu'il ne puisse pas bloquer sa suppression ultérieure. Un rapport vide signifie simplement que cet analyseur limité n'a trouvé aucun champ lisible, et non que tous les canaux d'information possibles sont absents.

À retenir : la lecture des métadonnées est un travail local au niveau de l'octet ; l'outil de confidentialité des métadonnées d'image fait exactement cela, vous pouvez donc inspecter avant de partager sans faire confiance à un serveur.

La lecture des métadonnées est une tâche locale au niveau des octets lorsque l'implémentation conserve les octets sélectionnés dans l'onglet et n'effectue aucune requête avec eux. Utilisez le rapport pour identifier ce que cet analyseur peut voir, puis utilisez l'action de suppression distincte lorsqu'une copie nettoyée est nécessaire. L'inspection ne modifie jamais la photographie originale, et le code source et le test d'isolation du réseau fournissent des preuves plus solides qu'un badge de traitement de navigateur générique.