3

What does Mozilla Firefox's XPCSafeJSObject wrapper actually do?

MDC's documentation is as follows:

This wrapper was created to address some problems with XPCNativeWrapper. In particular, some extensions want to be able to safely access non-natively-implemented content defined objects (and to access the underlying JavaScript object under an XPCNativeWrapper without its strong behavior guarantees). XPCSJOW act as a buffer between the chrome code.

This doesn't tell me a lot. In particular, I can't tell how accessing objects via XPCSafeObject is any different to accessing them directly.

Edit: I understand that the purpose of the wrappers in general is to protect privileged code from unprivileged code. What I don't understand (and doesn't seem to be documented) is how exactly XPCSafeJSObject does this.

Does it just drop privileges before accessing a property?

4

3 に答える 3

4

実際、XPCSafeJSObjectWrapper は、ウィンドウやドキュメントを含むすべてのコンテンツ オブジェクトに使用されます (実際には、これが最も一般的に必要とされる場所です)。これは主に、XSS 攻撃が自動的に特権エスカレーション攻撃に変わるのを防ぐために考案されたものだと思います (ブラウザー自体に対して XSS を実行することにより)。 . 少なくとも現在、XSS 攻撃が見つかった場合 (残念なことに人々は引き続き調査することになります)、ブラウザー全体が危険にさらされることはありません。XPCNativeWrapper は、もともとブラウザが XSS 攻撃から身を守るためのマニュアル (したがって、拡張機能による偶発的な誤用が発生しやすい) の方法でした。

于 2009-10-09T19:51:40.583 に答える
3

ラッパーは、評価されるコードがクロム特権なしで評価されることを保証するだけです。このラッパーを使用せずにオブジェクトに直接アクセスすると、コードを chrome 権限で実行できるようになり、そのコードでほぼ何でも実行できるようになります。

于 2009-05-09T17:10:26.603 に答える
1

ラッパーの一般的な目的は、非特権コードと対話するときに特権コードを保護することです。特権のないコードの作成者は、JavaScript オブジェクトを再定義して悪意のあることを行う可能性があります。たとえば、プロパティのゲッターを再定義して、副作用として何か悪いことを実行することがあります。特権コードがプロパティにアクセスしようとすると、不正なコードが特権コードとして実行されます。ラッパーはこれを防ぎます。このページでは、その考え方について説明します。

XPCSafeJSObject は、ネイティブに実装されていない JavaScript オブジェクト (つまり、ウィンドウ、ドキュメントなどではなく、ユーザー定義オブジェクト) のラッパーを提供します。

編集: 実装方法については、ソース コードを確認してください(現時点では完全には読み込まれていません)。また、DXRで XPCSafeJSObject を検索して、他の関連するソース ファイルを探します。

于 2008-10-27T16:47:54.127 に答える