繁體中文

影像與照片·影像元資料隱私工具

瀏覽器如何從 JPEG 讀取 EXIF 而無需上傳

· 工作原理

exif 影像隱私 瀏覽器處理 檔案格式

一張照片在一個瀏覽器內變成本地位元組、JPEG 區段和可讀 EXIF 欄位
原始 ToolAcre 向量圖

演練將 JPEG 放到頁面上並查看其元資料之間實際發生的情況:在本地讀取字節,定位 APP1 段,並在 JavaScript 中對其中的 TIFF 目錄進行解碼,不涉及伺服器。

要測試的宣告:「沒有上傳任何內容」-為什麼元資料檢查器只需要讀取現有的字節,以及如何確認沒有請求離開分頁

照片未上傳的宣告是可測試的而不是裝飾性的。該工具將選定的檔案讀入 ArrayBuffer,將其轉換為位元組並將這些位元組直接傳遞給元資料讀取器。它的隱私權宣告謹慎地限制了承諾:照片在瀏覽器標籤中進行解析,不儲存任何副本,並公開的分析請求與處理檔案的程式碼路徑是分開的。

使用檔案 API 在本機上讀取檔案 — 瀏覽器如何將照片的 ArrayBuffer 傳遞給工具,而無需位元組離開裝置

檔案選擇器提供瀏覽器 File 對象,並 file.arrayBuffer() 使其內容可供頁面中已執行的 JavaScript 使用。 ToolAcre 強制執行 50 MB 上限,然後從位元組本身辨識 JPEG、PNG 或 WebP。此本機讀取不需要表單提交或影像上傳端點,且網路隔離測試在不記錄請求的情況下測試所有三種支援的格式。

尋找 APP1 區段 — 將 JPEG 標記從 SOI 移動到「Exif」標頭,並跳過攜帶 ICC 或 XMP 的段

對於 JPEG,讀取器在影像開始標記之後開始,並遍歷標記段直到掃描開始標記。它識別以 Exif 開頭的 APP1 有效負載並解析這些負載,而僅檢測到 XMP 以進行刪除,並故意保留 ICC 作為渲染資料。從掃描標記開始的所有內容都屬於壓縮圖片路徑,而不是 EXIF 報告。

解碼 TIFF 標頭和 IFD — 位元組順序(II 或 MM)、IFD0 的偏移量以及指向 Exif 和 GPS 子目錄的 12 位元組條目

EXIF 有效負載包含 TIFF 區塊。解析器讀取 II 或 MM 位元組順序標記,檢查 TIFF 魔術值並追蹤 IFD0 的偏移量。每個目錄條目提供標籤、類型、計數以及內聯值或偏移量。從 IFD0 開始,程式碼僅遵循 Exif 和 GPS 子目錄指針,保持遍歷有界,而不是追逐每個可能的私有結構。

將原始標籤值轉換為可讀欄位 - 標籤 ID、資料類型、有理數和 ASCII 字串,以及為什麼某些值需要查找表

原始值僅在其類型和標籤被解釋後才變得有用。讀取分子和分母後,ASCII 欄位變成字串,數字類型使用 TIFF 位元組順序,有理對變成數字。標籤字典標記相機製造商、型號、時間戳記、軟體、序列欄位和 GPS 值,然後將位置和裝置身分分類在不太敏感的技術欄位之前。

工作範例:在主執行緒上解析的手機照片

工作簿將此範例描述為在 Web Worker 中執行,但附帶的面板在等待 file.arrayBuffer() 後直接呼叫 readMetadata;沒有工人參與這條路徑。因此,在頁面主執行緒上讀取並解析選定的電話 JPEG,之後將所有緯度和經度列印為數字,並呈現完整的欄位表。更正很重要,因為本地處理和工人處理是不同的宣告。

這不包括什麼 - MakerNote 內部結構、RAW 格式、HEIC 和視訊容器不在本演練和工具之外

讀者故意不完整。它不會解碼 MakerNote 內部結構、IFD1 縮圖欄位、JPEG XMP 內容或不受支援的 RAW、HEIC、AVIF、TIFF、GIF 和 SVG 容器。損壞的 EXIF 段會被跳過,因此它不會阻止以後的刪除。空報告僅表示該有界解析器沒有找到可讀欄位,而不意味著每個可能的資訊通道都不存在。

重點:讀取元資料是一項本地位元組級工作 — 映像元資料隱私工具正是執行此操作,因此您可以在共享之前進行檢查,而無需信任伺服器

當實作將所選位元組保留在分頁中並不對它們執行任何請求時,讀取元資料是本機位元組級作業。使用報告來識別該解析器可以看到的內容,然後在需要清理副本時使用單獨的刪除操作。檢查永遠不會改變原始照片,原始碼和網路隔離測試提供了比通用瀏覽器處理徽章更強有力的證據。