ユーザー追跡の目的で使用されるブラウザーのフィンガープリントと戦うことにより、ユーザーのセキュリティを保護するための Firefox 拡張機能を開発しようとしています。
すべてではないにしても、多くのフィンガープリンティング手法には、 、 、 、画面解像度、ウィンドウ ツールバーの高さなどのコンテンツの記録が含まnavigator.plugins
れnavigator.oscpu
ますnavigator.platform
。追跡に使用されます。2 つ目は、Web ページを分離して、以前に隠された情報 (Cookie など) を再利用したり.sol
、偽物E-Tag
やまだ発見されていないものを利用したりしないようにすることです。
navigator
どちらの方法でも、特権オブジェクトの構成不可能なプロパティにゲッターを再実装する必要がありscreen
、location
これが私が立ち往生している場所です。
たとえば、次の簡単なコードをブラウザ コンソールに入力しても機能しません。
Object.defineProperty(getBrowser().contentWindow.location, 'href', {
get: function() {
return 'foobar';
}
});
エラーは発生しませんが、プロパティを再定義することもありません。さらに、何らかの理由で object の現在の値を返しますlocation
— 私が期待していないものですObject.defineProperty
。
に置き換えるlocation
とlocation.wrappedJSObject
、ブラウザは を吐き出しTypeError: can't redefine non-configurable property 'href'
、特権のないコードがスローするものと同じになります。
何かを呼び出すと何が起こるかを追跡しようとしObject.defineProperty
ました。で始まりjs::obj_defineProperty()
、次にいくつかのチェックを行う に移動し、まだ完全には理解していない大量のチェックがある にjs::StandardDefineProperty
下降し、最後に実際のオブジェクトの変更が行われる で終了するようです。js::DefinePropertyOnObject
js::NativeDefineProperty
したがって、質問は次のとおりです。
location
ページ コンテンツ サンドボックスの,navigator
,オブジェクトを完全に再定義screen
して、拡張機能によって制御されるモック プロキシに置き換えることはできますか?- または、前述のオブジェクトの構成不可能なプロパティを再定義することは可能ですか?
js::NativeDefineProperty
または、 chrome JavaScriptから呼び出すことはできますか?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
、両方のタブが .