Русский

Изображения и фотографии · Инструмент конфиденциальности метаданных изображений

Как браузер читает EXIF из JPEG без его загрузки

· Как это работает

exif конфиденциальность изображений обработка браузера форматы файлов

Фотография становится локальными байтами, сегментами JPEG и читаемыми полями EXIF в одном браузере.
Оригинальная векторная иллюстрация ToolAcre

Пошаговое описание того, что на самом деле происходит между размещением JPEG на странице и просмотром его метаданных: байты читаются локально, сегмент APP1 находится, а каталоги TIFF внутри него декодируются в JavaScript без участия сервера.

Утверждение для проверки: «ничего не загружено» — почему инспектору метаданных нужно читать только те байты, которые у него уже есть, и как убедиться, что ни один запрос не покидает вкладку

Заявление о том, что фотография не загружена, скорее проверяемое, чем декоративное. Инструмент считывает выбранный файл в ArrayBuffer, преобразует его в байты и передает эти байты непосредственно в средство чтения метаданных. Его заявление о конфиденциальности тщательно ограничивает обещание: фотография анализируется на вкладке браузера, никакая копия не сохраняется, а раскрытые аналитические запросы отделены от пути кода, который обрабатывает файл.

Локальное чтение файла с помощью файла API — как браузер передает инструменту ArrayBuffer вашей фотографии, не покидая устройства.

Средство выбора файлов предоставляет объект File браузера, а file.arrayBuffer() делает его содержимое доступным для JavaScript, уже запущенного на странице. ToolAcre обеспечивает ограничение 50 MB, затем идентифицирует JPEG, PNG или WebP из самих байтов. Это локальное чтение не требует отправки формы или конечной точки загрузки изображения, а тест сетевой изоляции проверяет все три поддерживаемых формата без записи запроса.

Нахождение сегмента APP1 — перемещение маркеров JPEG от SOI к заголовку Exif и пропуск сегментов, содержащих ICC или XMP вместо этого.

Для JPEG считыватель запускается после маркера начала изображения и проходит сегменты маркера до маркера начала сканирования. Он распознает полезные нагрузки APP1, начинающиеся с Exif, и анализирует их, в то время как XMP обнаруживается только для удаления, а ICC намеренно сохраняется как данные рендеринга. Все, начиная с маркера сканирования, принадлежит пути сжатого изображения, а не отчету EXIF.

Декодирование заголовка TIFF и IFD — порядок байтов (II или MM), смещение до IFD0 и байтовые записи 12, которые указывают на подкаталоги Exif и GPS.

Полезная нагрузка EXIF содержит блок TIFF. Анализатор считывает маркер порядка байтов II или MM, проверяет магическое значение TIFF и отслеживает смещение до IFD0. Каждая запись каталога содержит тег, тип, количество и либо встроенное значение, либо смещение. Начиная с IFD0, код следует только указателям подкаталогов Exif и GPS, сохраняя ограниченность обхода вместо преследования всех возможных частных структур.

Превращение необработанных значений тегов в читаемые поля — идентификаторы тегов, типы данных, рациональные числа и строки ASCII и почему для некоторых значений нужна таблица поиска

Необработанные значения становятся полезными только после интерпретации их типов и тегов. Поля ASCII становятся строками, числовые типы используют порядок байтов TIFF, а рациональные пары становятся числами после чтения числителя и знаменателя. Словарь тегов помечает производителя, модель, временные метки, программное обеспечение, поля серийного номера и значения GPS, а затем классифицирует местоположение и идентификацию устройства, опережая менее конфиденциальные технические поля.

Рабочий пример: фотография телефона, разобранная в основном потоке

В рабочей книге этот пример описан как выполняемый в веб-воркере, но поставляемая панель вызывает readMetadata непосредственно после ожидания file.arrayBuffer(); ни один рабочий не участвует в этом пути. Таким образом, выбранный телефон JPEG считывается и анализируется в главном потоке страницы, после чего любая широта и долгота печатаются как числа и отображается вся таблица полей. Исправление имеет значение, поскольку локальная обработка и рабочая обработка — это разные утверждения.

Что здесь не рассматривается: внутренние компоненты MakerNote, форматы RAW, HEIC и видеоконтейнеры находятся за пределами этого пошагового руководства и вне инструмента.

Читатель намеренно неполный. Он не декодирует внутренние элементы MakerNote, поля миниатюр IFD1, содержимое JPEG XMP или неподдерживаемые RAW, HEIC, AVIF, TIFF, GIF и SVG контейнеров. Поврежденный сегмент EXIF пропускается, поэтому он не может заблокировать дальнейшее удаление. Пустой отчет означает только то, что этот ограниченный анализатор не нашел читаемых полей, а не то, что все возможные информационные каналы отсутствуют.

Вывод: чтение метаданных — это локальная работа на уровне байтов. Инструмент конфиденциальности метаданных изображений делает именно это, поэтому вы можете проверить их перед публикацией, не доверяя серверу.

Чтение метаданных — это локальное задание на уровне байтов, когда реализация сохраняет выбранные байты на вкладке и не выполняет к ним никаких запросов. Используйте отчет, чтобы определить, что может видеть этот анализатор, а затем используйте отдельное действие по удалению, когда необходима очищенная копия. Проверка никогда не меняет исходную фотографию, а исходный код и тест на сетевую изоляцию предоставляют более убедительные доказательства, чем обычный значок обработки браузера.