0

現在、SpiderMonkey のnsJSContext::CompileEventHandler関数は、イベント ハンドラを null プリンシパルでコンパイルします。したがって、Spidermonkey のfrontend::CompileFunctionBody関数では、現在、プリンシパルをイベント ハンドラに関連付ける方法がありません。その後、イベント ハンドラ関数のプリンシパルはnsScriptSecurityManager::CheckFunctionAccessで決定されます。
私の質問は、イベント ハンドラーのセキュリティ プリンシパルをコンパイラのエントリ ポイントで検出できるかどうかです。この背後にある私の直感は次のとおりです。通常、イベント ハンドラーは DOM 要素に関連付けられ、そのプリンシパルはコンテナー ドキュメントです。イベント ハンドラーがコンテナー ドキュメントとは別のプリンシパルによって呼び出されるケースはありますか? 上記が当てはまる場合、イベント ハンドラーのプリンシパルは、frontend::CompileFunctionBody関数の「ファイル名」属性から判断できますか (たとえば、chrome:// URI はシステムを意味し、http:// uri はシステムではないことを意味します)。
(ところで、about: protocol ドキュメントのプリンシパルをどのように検出できますか?「システム」である場合もあれば、そうでない場合もあります)

4

1 に答える 1

0

単一のイベント ハンドラーは、さまざまなプリンシパル (XBL などを介して) を持つドキュメント間で共有できるため、コンパイル時にプリンシパルを実際に知ることはできません。ハンドラーが実行される前に、適切なプリンシパルで複製されます。

于 2012-03-10T16:34:57.647 に答える