3

ユーザー追跡の目的で使用されるブラウザーのフィンガープリントと戦うことにより、ユーザーのセキュリティを保護するための Firefox 拡張機能を開発しようとしています。

すべてではないにしても、多くのフィンガープリンティング手法には、 、 、 、画面解像度、ウィンドウ ツールバーの高さなどのコンテンツの記録が含まnavigator.pluginsnavigator.oscpuますnavigator.platform。追跡に使用されます。2 つ目は、Web ページを分離して、以前に隠された情報 (Cookie など) を再利用したり.sol、偽物E-Tagやまだ発見されていないものを利用したりしないようにすることです。

navigatorどちらの方法でも、特権オブジェクトの構成不可能なプロパティにゲッターを再実装する必要がありscreenlocationこれが私が立ち往生している場所です。

たとえば、次の簡単なコードをブラウザ コンソールに入力しても機能しません。

Object.defineProperty(getBrowser().contentWindow.location, 'href', {
    get: function() {
        return 'foobar';
    }
});

エラーは発生しませんが、プロパティを再定義することもありません。さらに、何らかの理由で object の現在の値を返しますlocation— 私が期待していないものですObject.defineProperty

に置き換えるlocationlocation.wrappedJSObject、ブラウザは を吐き出しTypeError: can't redefine non-configurable property 'href'、特権のないコードがスローするものと同じになります。

何かを呼び出すと何が起こるかを追跡しようとしObject.definePropertyました。で始まりjs::obj_defineProperty()、次にいくつかのチェックを行う に移動し、まだ完全には理解していない大量のチェックがある にjs::StandardDefineProperty下降し、最後に実際のオブジェクトの変更が行われる で終了するようです。js::DefinePropertyOnObjectjs::NativeDefineProperty

したがって、質問は次のとおりです。

  1. locationページ コンテンツ サンドボックスの, navigator,オブジェクトを完全に再定義screenして、拡張機能によって制御されるモック プロキシに置き換えることはできますか?
  2. または、前述のオブジェクトの構成不可能なプロパティを再定義することは可能ですか?
  3. js::NativeDefinePropertyまたは、 chrome JavaScriptから呼び出すことはできますか?
  4. js::NativeDefinePropertyまたは(あまり好ましくありません)、サービスとしてクロムに公開するバイナリアドオンを実装することは可能ですか?

更新: Mozilla IRC で質問があります。場所の書き換えはプライバシーにどのように関連していますか。今のところ、プライベート ブラウジング モードのすべてのウィンドウは同じ Cookie やストレージなどを共有するため、あまり頻繁にリセットしない限り、プライベート モードでも追跡できます。どのくらいの頻度が多すぎるかは問題です。理想的には、サイトを訪問するたびにリセットする必要があります。各サイトがあなたをマークする可能性があるからです. プライベート ウィンドウやタブを個別に分けるなど、プライベート モードの粒度を調整できる機能があれば、すばらしいと思います。

すべての URL にある種のタブ固有の長いランダム タグを付けることを考えたのでhttp://example.com/foo、2 つの別々のプライベート タブで開くとhttp://example.com.AYZYXP/fooと になりhttp://example.com.QUSOFX/fooます。ブラウザーの観点から見ると、これらは 2 つの異なるドメイン名であり、独自のキャッシュ ルール、Cookie、DOM ストレージ、IndexedDB、FlashPlayer の永続性などを備えています。Web ページの観点からはhttp://example.com/foo、両方のタブが .

4

1 に答える 1

0

おそらく1つの変更を行う方法があり、ブラウザはそれをすべてに送信し、JavaScriptコードはwindow.navigator.blahオーバーライドされた値を返します. みたいなものを見つけたら、目を開けたままにします。

XPCOM リファレンスは次のとおりです: https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface

それらすべてを探索すると、何かをオーバーライドするものが見つかると確信しています。

ただし、以下は、オブザーバーをアタッチする1つのソリューションです

リクエストヘッダーまたはレスポンスヘッダーを設定したかどうかはわかりません.javascriptがwindow.navigator.blah何を返すかはわかりませんが、試してみる価値がある場合は、貼り付けコードをとにかくコピーしてください。見てみな。

あなたがしていることは、オブザーバーを設定することですhttp-on-modify-request(または、他のオブザーバーについて他の人がここを見るかもしれません:MDN :: Observer Notifications - HTTP Requests

次に、オブザーバーのハンドラーでsetRequestHeaderetc で変更をsetResponseHeader行います。オブザーバーをhttp-on-examine-response.

このトピックを参照してください。サンプル コードは、最初のタブのみでユーザー エージェントをスプーフィングします: Firefox の 1 つのタブだけでユーザー エージェントを変更するにはどうすればよいですか?

于 2015-02-08T10:37:55.667 に答える