03 / 指南
如何驗證線上工具沒有上傳你的檔案
一份免費的方法論指南:用瀏覽器的網路面板和帶金絲雀字串的測試檔案,檢查線上工具是否上傳你的檔案,並說明快取與 Service Worker 的注意事項。然後看同樣的方法如何以 Toolars 公開的、可重複執行的證據 harness 形式運轉,附加每日重新採收的收據。
為什麼要驗證而不是相信
處理方式是可檢驗的。任何工具都可以說你的檔案不會離開裝置;只有當真實任務中的網路流量可以觀察、可以重現時,這個主張才成為證據。本指南教你一個方法——在工具工作時觀察瀏覽器送出了什麼——然後展示同樣的方法如何作為長期公開的工件運轉,讓關於 Toolars 的主張可以被核查,而不是被相信。
- 承諾與證據標籤是承諾,封包是證據;差別在於封包可以重播、檢查和質疑。
- 一個方法,任何工具方法與工具無關:它在瀏覽器內建的網路面板中執行,大約需要一分鐘,適用於你想測試的任何網站。
- 先在自己身上驗證本指南不點名任何其他服務,也不對任何其他網站的行為做任何斷言;它教你檢查方法,然後用 Toolars 自己公開的證據做示範。
六十秒的 DevTools 檢查
每個桌面瀏覽器都帶有網路監視器,記錄頁面送出的每個請求。依正確的順序使用,它直接回答上傳之問:有沒有請求帶著我的檔案離開這台裝置?
在完成工作並下載結果時保持面板錄製。證據的單位是整個工作階段:上傳只能發生在請求之內,而請求無法躲過完整的記錄。
- 先開啟並清空先開啟工具的頁面和網路面板——開發者工具,然後 Network 標籤——清空記錄並保持錄製。載入頁面總會產生 HTML、腳本和樣式的請求;這種頁面殼流量是預期之內的。
- 用可捨棄的檔案試用專門為這個目的製作的測試檔案執行任務:轉換、旋轉、壓縮。乾淨的初始記錄意味著你看到的每個請求都屬於你的任務。
- 觀察動作按下工具的動作並觀察列表。本機工具可能在首次使用時取得程式碼、字型或引擎資源——而在預熱執行之後,理想情況下什麼都不發生。
讀記錄:頁面殼的流量不是你的檔案
關鍵技能是區分頁面流量和資料流量。頁面殼流量把應用送進你的瀏覽器;資料流量把內容運走。知道要看什麼之後,兩者在面板裡看起來非常不同。
- 頁面殼請求頁面殼請求體積小、可快取,名字像軟體——腳本、樣式、字型和引擎檔案,位於網站自己的路徑下。它們把程式碼送到你的裝置;不會把你的檔案帶到任何地方。
- 上傳的特徵上傳看起來像一個 POST、PUT 或 multipart 請求,其內文大致與你的檔案等大,送往與頁面不同的來源。如果按下轉換的瞬間有這樣的請求飛出,檔案就離開了裝置。
- 打開檢視體積本身在兩個方向上都不構成證明:壓縮分塊、可續傳的工作階段和 WebSocket 都可能把一次傳輸拆開。證據在請求的方法、目的地和載荷裡——打開它,看。
快取和 Service Worker 會改變你看到的東西
網路記錄測量的是這個瀏覽器狀態下的這一次執行——而瀏覽器狀態正是快取和 Service Worker 存在的意義去改變的東西。讀好記錄意味著控制這個狀態。
- 預熱是正常的重複造訪時,已預熱的網站會從磁碟或 Service Worker 提供頁面殼,面板顯示的請求遠少於第一次。預熱後請求變少是健康的本機工具的樣子——它本身不是任何事的證明。
- 從乾淨狀態開始為了讀得乾淨,請從新的瀏覽器設定檔或無痕視窗開始,啟用面板的停用快取選項,並記住無痕模式並非在每個瀏覽器都會攔截 Service Worker。
- 攔截 Worker最強的封包讓每次執行都從停用 Service Worker 的新瀏覽器情境開始,這樣沒有任何東西從快取提供,也沒有任何請求在面板記錄之前被攔截。下面的公開 harness 正是這樣記錄的。
金絲雀檢查:給檔案做記號,再搜尋
比觀察流量更進一步的決定性升級:給測試檔案一個唯一記號——金絲雀字串——然後在擷取的請求中搜尋這個精確的字串。如果這些位元組沒有出現在任何請求中,檔案就沒有離開。
這是非專業人士手中最有說服力的技術,因為它檢驗的是位元組本身,而不是工具的意圖。
- 做記號製作一個可捨棄的檔案,嵌入你自己產生、從未公開的記號:文字圖層、圖片註解、PDF 便箋裡的隨機 UUID。唯一性讓一次命中才有意義。
- 搜尋流量任務完成後,在面板擷取的請求中——URL、查詢字串和內文——搜尋該記號。命中意味著檔案的位元組離開了裝置;整個工作階段都沒有命中,就是它們沒有離開的有力直接證據。
- 重複檢查金絲雀只涵蓋你觀察到的工作階段——這就是為什麼定期、重複的封包比一次仔細的手工檢查更重要。
Toolars 公開的關於自己的證據
Toolars 把同樣的方法作為長期公開的工件運轉:每個工具的帶型別處理宣告、帶封包流量的 Privacy proof 頁面,以及一份機器可讀的收據——它陳述自己的局限和陳述結果一樣坦率。
- 已揭露的主機Privacy proof 頁面列出了網站頁面殼可達的每個外部主機、隨回應提供的安全標頭,以及可以在同一個網路面板中手工執行的自我驗證步驟。
- 機器可讀收據/privacy-proof/verification-receipt.json 的機器可讀驗證收據公開了驗證命令、各情境的實測結果、已揭露的外部主機,以及用來與網站 X-Toolars-Release 回應標頭比對的發行修訂號。
- 坦白的局限這份收據說它不能證明什麼和它證明了什麼一樣清楚:被測量的視窗只涵蓋那一次執行,而不是對服務未來一切行為的稽核。
公開證據 harness 和它的四個情境
同樣的檢查被打包成開放倉庫中可執行的 harness,因此對本機處理的主張可以在不向 Toolars 索取任何東西的情況下得到驗證。它驅動線上網站,記錄包括 Worker 請求在內的每個請求,一旦有邊界被跨越就響亮地失敗。
harness 位於公開倉庫 https://github.com/aixtral/toolars-open 的 evidence-harness/ 目錄下。它以 MIT 授權條款發佈,驗證的是已部署的網站——主張真正所指的對象——而不是私人的暫存副本。
- 四個情境harness 在無頭 Chromium 中驅動線上網站跑四個情境:帶下載的圖片轉換;HEIC 轉換——預熱解碼器後的實測執行必須發出零請求;帶第二語言包的 OCR 任務——語言包必須從網站自己的來源送達;以及在內建樣本上的 PDF 旋轉。
- 三條不變量在每個實測視窗內,它堅持三條不變量:上傳請求為零;金絲雀洩漏為零——輸入檔案的位元組中帶有隨機記號;超出網站自己揭露的第一方分析代理之外的意外跨域請求為零——那個代理不是被忽略,而是被計數、被點名。
- 每日重新採收一個計畫任務每天對線上網站重新採收收據,倉庫的隱私證明徽章只有在最新收據的結果為 verified 時才為綠色;失敗的執行讀作 violation 或 inconclusive,絕不會悄悄變綠。
自己重跑證明
收據的價值與它的可重現性相當。harness 的構建目標是讓任何人都能以線上網站為目標執行它,並把結果寫入一個可以逐行檢查的檔案。
由於每個情境都從停用 Service Worker 的新瀏覽器情境開始,零請求的讀數意味著它看起來的意思:預熱之後,實測執行完全沒有觸碰網路。
- 複製並驗證複製倉庫,進入 evidence-harness/,安裝它的依賴和 Playwright 的 Chromium,然後以線上網站為目標來源執行 verify 腳本。
- 結束碼就是裁決執行會寫出 privacy-proof-receipt.json;如果有任何意外跨越邊界——帶內文的請求、URL 中的金絲雀、或者不在網站公開名單上的主機——就以非零碼結束。
- 只有中繼資料收據只記錄請求中繼資料——方法、主機、路徑、資源類型、是否帶內文——絕不記錄檔案內容、請求內文或回應內文。
這個方法不能證明什麼
誠實的驗證包含它自己的邊界。知道這些邊界,可以避免把一條乾淨的網路軌跡過度解讀為它從來都不是的保證。
- 一個視窗乾淨的軌跡涵蓋被觀察的工作階段——那一次執行、那個瀏覽器、那個檔案。它不稽核提供商的伺服器、人員或未來的程式碼。
- 你的裝置很重要從你的裝置離開什麼,也取決於你的裝置:被攻陷的瀏覽器、惡意擴充功能或共用設定檔,都可能脫離任何工具架構獨立地搬運資料。
- 常設證據把每個隱私主張——包括本站的主張——都當作會被重複採收的常設證據,而不是終身保證。這正是 harness 按計畫重跑、而不是躺在一次漂亮擷取上的原因。
檢視常設證據。
帶型別的執行時宣告、封包的流量、已揭露的主機和機器可讀收據——每天對線上網站重新採收。