03 / ガイド
オンラインツールがファイルをアップロードしていないか確認する方法
無料の方法論ガイド:ブラウザーのネットワークパネルとカナリア文字列のテストファイルで、オンラインツールがファイルをアップロードしていないか確認します。キャッシュとサービスワーカーの注意点つき。同じ手法が Toolars の公開エビデンスハーネスとして毎日再採取されるレシートで動いている様子も紹介します。
なぜ信じるのではなく検証するのか
処理に関する主張は検証可能です。どのツールも「ファイルがデバイスから出ません」と言えますが、実際のタスク中のネットワーク通信が観察でき、繰り返し再現できるときに初めて、その主張は証拠になります。このガイドは 1 つの方法——ツールが動く間、ブラウザーが何を送信しているかを見る——を教え、その後で同じ方法が恒常的な公開アーティファクトとして動いている様子を示します。Toolars に関する主張を信じるのでなく、確認できるようにするためです。
- 約束と証拠ラベルは約束、キャプチャは証拠です。違いは、キャプチャであれば再生でき、検査でき、異議を唱えられることです。
- 1 つの方法、どのツールでもこの方法はツールに依存しません。ブラウザー付属のネットワークパネルで約 1 分、テストしたいサイトならどこでも使えます。
- まず自分自身で検証このガイドは他のサービスを名指しせず、他のサイトの動作について何も断定しません。確認の方法を教え、続いて Toolars 自身が公開する証拠で実演します。
60 秒の DevTools チェック
デスクトップブラウザーはすべて、ページが行うリクエストを記録するネットワークモニターを搭載しています。順序を守って使えば、アップロードの疑問に直接答えられます。このデバイスから、私のファイルを載せたリクエストが出たのか、と。
パネルを記録したまま作業を終え、結果をダウンロードします。証拠の単位はセッション全体です。アップロードはリクエストの中にしか存在できず、リクエストは完全なログからは隠れられません。
- 先に開いて消すツールのページとネットワークパネル(開発者ツール→ネットワークタブ)を先に開き、ログを消去して記録を続けます。ページの読み込みでは必ず HTML・スクリプト・スタイルのリクエストが発生します。そのシェルの通信は想定内です。
- 捨てられるファイルで試すこのために作ったテストファイルだけでタスクを実行します。変換、回転、圧縮——何でも。ログがきれいな状態で始めると、見えるリクエストがすべて自分のタスクに属することが分かります。
- アクションを見るツールのアクションを押して一覧を見ます。ローカルツールは初回にコード・フォント・エンジンを取得することがあります。ウォームアップ実行の後は、理想的には何も発生しません。
ログの読み方:シェルの通信はあなたのファイルではない
必要なスキルは、ページの通信とデータの通信を見分けることです。シェルの通信はアプリケーションをブラウザーへ届け、データの通信はコンテンツをどこかへ運びます。見分け方を知れば、2 つはまったく違って見えます。
- シェルのリクエストシェルのリクエストは小さく、キャッシュ可能で、ソフトウェアらしい名前——スクリプト、スタイル、フォント、エンジンファイル——を持ち、サイト自身のパスにあります。これはコードをデバイスへ届けるもので、ファイルをどこかへ運ぶものではありません。
- アップロードの兆候アップロードは、おおよそファイルと同じ大きさの本文を持つ POST・PUT・マルチパートリクエストとして見え、ページのオリジンとは別の宛先へ送られます。変換を押した瞬間にそれが飛んでいたら、ファイルはデバイスを出ました。
- 開いて確認サイズだけではどちらの証明にもなりません。圧縮チャンク、再開可能なセッション、WebSocket は転送を分割します。証拠になるのはリクエストのメソッド・宛先・本文です。開いて確認しましょう。
キャッシュとサービスワーカーは見えるものを変える
ネットワークログは、このブラウザー状態でのこの実行を測ります。そしてブラウザー状態は、キャッシュとサービスワーカーが変えるために存在するものです。ログを正しく読むには、その状態を制御することが必要です。
- ウォームアップは普通再訪時には、ウォームアップ済みのサイトがシェルをディスクやサービスワーカーから供給し、パネルには初回よりはるかに少ないリクエストしか表示されません。ウォームアップ後の少数のリクエストは健全なローカルツールの姿であり、それ自体は何の証明にもなりません。
- きれいな状態からきれいに読むには、新しいブラウザープロファイルかシークレットウィンドウから始め、パネルのキャッシュ無効オプションを有効にします。シークレットモードがどのブラウザーでもサービスワーカーを止めるわけではないことに注意してください。
- ワーカーをブロック最も強いキャプチャは、キャッシュから供給されるものも、パネルが記録する前に傍受されるものもないよう、サービスワーカーをブロックした新しいブラウザーコンテキストから各実行を始めます。後で紹介する公開ハーネスはまさにその方法で記録しています。
カナリアチェック:ファイルに印を付けて検索する
通信を眺めるだけの次の一手は、テストファイルに一意の印——カナリア文字列——を埋め込み、キャプチャしたリクエストからその文字列を検索することです。その文字列がどのリクエストにも現れなければ、ファイルはどこにも運ばれていません。
これは非専門家が使える最も説得力のある手法です。ツールの意図ではなく、バイトそのものをテストするからです。
- 印を付ける捨てられるファイルを作り、自分で生成してどこにも公開したことのない印を埋め込みます。テキストレイヤーや画像コメント、PDF のノートにランダムな UUID を。一意性が、一致の意味を作ります。
- 通信を検索するタスクの後、パネルにキャプチャされたリクエスト——URL、クエリ文字列、本文——からその印を検索します。一致があれば、ファイルのバイトがデバイスを出たことになります。セッション全体で一致しなければ、出なかったことの強い直接証拠になります。
- 繰り返すカナリアが覆うのは観察したセッションだけです。だからこそ、一度きりの丁寧な手作りチェックより、繰り返される定期キャプチャが重要です。
Toolars が自身について公開する証拠
Toolars は同じ手法を恒常的な公開アーティファクトとして運用しています。すべてのツールに型付きの処理宣言、キャプチャ済みの通信を載せた Privacy proof ページ、そして結果と同じくらい率直に限界を述べる機械可読のレシートです。
- 開示されたホストPrivacy proof ページには、サイトのシェルが到達しうる外部ホストの一覧、応答とともに返されるセキュリティヘッダー、そして同じネットワークパネルで手作業実行できるセルフ検証手順があります。
- 機械可読レシート/privacy-proof/verification-receipt.json の機械可読レシートには、検証コマンド、測定済みシナリオの結果、開示済みの外部ホスト、サイトの X-Toolars-Release レスポンスヘッダーと照合するリリースリビジョンが公開されています。
- 率直な限界そのレシートは証明しないことを、証明することと同じくらい明確に述べています。測定されたウィンドウはその実行を対象とし、サービスが将来何をするかの監査ではありません。
公開エビデンスハーネスと 4 つのシナリオ
同じチェックはオープンリポジトリの実行可能なハーネスとしても公開されており、ローカル処理の主張を Toolars に何かを求めずに検証できます。ハーネスは公開サイトを操作し、ワーカーの取得も含めたすべてのリクエストを記録し、境界を越えるものがあれば大きく失敗します。
ハーネスは公開リポジトリ https://github.com/aixtral/toolars-open の evidence-harness/ にあります。MIT ライセンスで公開され、プライベートなステージングコピーではなく、主張の実際の対象である公開中のサイトを検証します。
- 4 つのシナリオハーネスはヘッドレス Chromium で公開サイトを 4 つのシナリオへ操作します。ダウンロード付きの画像変換。遅延ロードのデコーダがウォームアップした後の測定実行でリクエストゼロを出さなければならない HEIC 変換。言語パックがサイト自身のオリジンから到着しなければならない 2 言語対応 OCR。バンドル済みサンプルでの PDF 回転。
- 3 つの不変条件すべての測定ウィンドウで 3 つの不変条件を主張します。アップロードリクエストゼロ、カナリアリークゼロ——入力ファイルのバイトにはランダムな印が含まれます——そして、サイト自身が開示したファーストパーティの分析プロキシを超えた予期しないクロスオリジンリクエストゼロです。そのプロキシは無視されるのでなく、カウントされ、名前を挙げられます。
- 毎日の再採取スケジュールされたワークフローが公開サイトに対してレシートを毎日再採取し、リポジトリのプライバシー証明バッジは最新のレシートの結果が verified のときだけ緑になります。失敗した実行は violation か inconclusive と表示され、黙って緑にはなりません。
自分で証明を再実行する
レシートの価値は再現性と同じくらいです。ハーネスは誰でも、公開中のサイトを対象に、結果が 1 行ずつ検査できるファイルに書き出されるよう設計されています。
各シナリオはサービスワーカーをブロックした新しいブラウザーコンテキストで始まるため、リクエストゼロの読みは見たままの意味を持ちます。ウォームアップの後、測定実行はネットワークにまったく触れていません。
- クローンして検証リポジトリをクローンし、evidence-harness/ に入り、依存関係と Playwright の Chromium をインストールしてから、verify スクリプトを公開サイトを対象に実行します。
- 終了コードが判定実行は privacy-proof-receipt.json を書き出し、予期しないものが境界を越えた場合——本文を持つリクエスト、URL 内のカナリア文字列、サイトの公開リストにないホスト——にはゼロ以外で終了します。
- メタデータのみレシートが記録するのはリクエストのメタデータ——メソッド、ホスト、パス、リソースタイプ、本文の有無——だけで、ファイルの内容、リクエスト本文、レスポンス本文は決して記録しません。
この方法が証明できないこと
誠実な検証には自身の境界が含まれます。その境界を知っておけば、きれいなネットワークトレースを、そもそも保証ではないものへと読み過ぎることを防げます。
- 1 つの窓きれいなトレースは観察したセッション——その実行、そのブラウザー、そのファイル——を対象とします。プロバイダーのサーバーや担当者、将来のコードを監査するものではありません。
- デバイスが要因デバイスから何が出るかはデバイスにも依存します。侵害されたブラウザー、悪意のある拡張機能、共有プロファイルは、ツールのアーキテクチャとは独立にデータを動かしえます。
- 恒常的な証拠どのプライバシー主張も——このサイトが行う主張も含め——再採取される恒常的な証拠として扱い、一生の保証としては扱わないでください。ハーネスが 1 回の良いキャプチャに安心せずスケジュールで再実行されるのはまさにそのためです。
恒常的な証拠を見る。
型付きランタイム宣言、キャプチャ済みの通信、開示済みホスト、機械可読レシート——公開サイトに対して毎日再採取されています。