回答:
見る
論文より:
...現在のJavaシステムで使用されているスタック検査アルゴリズムは、次の単純なスタック検査モデルの一般化と考えることができます。
このモデルでは、プリンシパルは「システム」と「信頼できない」だけです。同様に、使用できる唯一の特権は「完全」です。このモデルは、Netscape Navigator 3.0で内部的に使用されているスタック検査システムに似ています。
このモデルでは、すべてのスタックフレームはプリンシパル(フレームが仮想マシンまたはその組み込みライブラリの一部であるコードを実行している場合は「システム」、それ以外の場合は「信頼されていない」)でラベル付けされ、 「その特権を有効にする」ことを選択したシステムクラスによって設定され、危険なことをしたいことを明示している。信頼できないクラスは、その特権フラグを設定できません。スタックフレームが存在する場合、その特権フラグ(存在する場合)は自動的に消えます。
ファイルシステムやネットワークへのアクセスなど、危険な操作を実行しようとするすべての手順では、最初にスタック検査アルゴリズムを適用して、アクセスを許可するかどうかを決定します。スタック検査アルゴリズムは、呼び出し元のスタック上のフレームを、新しいものから古いものへと順番に検索します。特権フラグ付きのスタックフレームが見つかると、検索が終了し、アクセスが許可されます。また、信頼されていないスタックフレーム(特権フラグを取得できなかった可能性がある)を検出すると、検索は終了し、アクセスが禁止され、例外がスローされます。...