8

背景: ETag 追跡については、こちらで詳しく説明されており、ウィキペディアでも言及されています。

「ETagによる追跡を防ぐにはどうすればよいですか?」 への回答に書いた回答です。この質問を書くように私を駆り立てました。

ETag 追跡を防止するブラウザー側のソリューションがあります。現在の HTTP プロトコルを変更せずに機能します。これは ETag 追跡の実行可能なソリューションですか?

サーバーに ETag を伝える代わりに、その ETag についてサーバーに質問し、それを既に持っているものと比較します。

擬似コード:

If (file_not_in_cache)
{
    page=http_get_request();     
    page.display();
    page.put_in_cache();
}
else
{
    page=load_from_cache();
    client_etag=page.extract_etag();
    server_etag=http_HEAD_request().extract_etag();

    //Instead of saying "my etag is xyz",
    //the client says: "what is YOUR etag, server?"

    if (server_etag==client_etag)
    {
        page.display();
    }
    else
    {
        page.remove_from_cache();
        page=http_get_request();     
        page.display();
        page.put_in_cache();
    }
}

私のソリューションでの HTTP 会話の例:

クライアント:

HEAD /posts/46328
host: security.stackexchange.com

サーバ:

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
ETag: "EVIl_UNIQUE_TRACKING_ETAG"
Content-Type: text/html
Content-Length: 131

ケース 1、クライアントには同一の ETag があります。

Connection closes, client loads page from cache.

ケース 2、クライアントに不一致の ETag があります。

GET...... //and a normal http conversation begins.

HTTP 仕様の変更が必要なエクストラ

以下は理論上の資料と考えてください。HTTP 仕様はおそらくすぐには変更されないでしょう。

1. HEAD オーバーヘッドの除去

わずかなオーバーヘッドがあることに注意してください。サーバーは HTTP ヘッダーを 2 回送信する必要があります。1 回は HEAD への応答で、もう 1 回は GET への応答です。これに対する理論上の回避策の 1 つは、HTTP プロトコルを変更し、ヘッダーのないコンテンツを要求する新しいメソッドを追加することです。その後、ETag が一致しない場合、クライアントは HEAD のみを要求し、その後はコンテンツのみを要求します。

2. キャッシュ ベースの追跡を防止する (または、少なくとも追跡をより困難にする)

Sneftel によって提案された回避策は ETag 追跡技術ではありませんが、私が提案した「HEAD、GET」シーケンスを使用している場合でも人々を追跡します。解決策は、ETag の可能な値を制限することです。ETag は、任意のシーケンスではなく、コンテンツのチェックサムでなければなりません。クライアントはこれをチェックし、チェックサム値とサーバーから送信された値が一致しない場合、キャッシュは使用されません。

補足:修正 2 により、次のEvercookie追跡技術も排除されます: pngData、etagData、cacheData。これを Chrome の「ブラウザを終了するまでローカル データのみ保持する」と組み合わせると、Flash と Silverlight の Cookie を除くすべての evercookie 追跡技術が排除されます。

4

3 に答える 3

3

キャッシュが使用されている限り、HTTP が変更されたとしても、悪用される可能性があります。メイン ページに 100 枚の画像が含まれているとします。それぞれの画像は、潜在的な 2 つの画像のプールからランダムに抽出されます。

ユーザーがサイトに戻ると、ブラウザーはページをリロードします (チェックサムが一致しないため)。平均して、100 個の画像のうち 25 個が以前からキャッシュされます。この組み合わせは、(ほぼ確実に) ユーザーを個別にフィンガープリントするために使用できます。

興味深いことに、これは DNA 父子鑑定の仕組みとほぼ同じです。

于 2013-12-03T11:26:47.153 に答える