8

2 つの Web アプリケーション (事前にコンパイルされたサイト) があり、1 つはファースト パーティであり、完全な信頼で実行されます。もう 1 つはサード パーティであり、部分的な信頼 (または特定のアクセス許可) で実行する必要があります。

TrustedAssembly.Web.Pages.MyPage完全信頼の既定の AppDomain で実行する必要があります。 UntrustedAssembly.Web.Pages.SomePage部分信頼 AppDomain で実行する必要があります。

さらに、TrustedAssembly.Web.Pages.MyPage動的に読み込まUntrustedAssembly.Web.Controls.SomeControlれる場合、ページが完全信頼の下で実行されている間に、部分信頼および/または特定のアクセス許可でコントロールを実行することは可能ですか?

逆に、たとえばUntrustedAssembly.Web.Controls.SomePage動的にロードする場合TrustedAssembly.Web.Controls.MyControl、ページが部分信頼で実行されているときに、コントロールを完全信頼で実行することは可能ですか?

更新/参考: これは .NET 4 です

4

2 に答える 2

5

これを行うには少し注意が必要です。以下に考えられる 2 つの考え方を示します。

1 つ目は、中程度の信頼でアプリを実行することですが、完全な信頼で実行したいものはすべて GAC に配置し、部分的な信頼で実行したいものは bin に配置します。

「その逆」のシナリオでは、信頼されたコントロールは、完全な信頼操作を実行できるようになる前に、セキュリティの「アサート」を実行する必要があることに注意してください。例えば

(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode)).Assert();

2 番目の考え方は、アプリを完全な信頼で実行することですが、カスタムのEvidenceを使用して中程度の信頼で実行するアセンブリを読み込みます。例えば

var evidence = new Evidence();
// Initialize the Evidence
Assembly.LoadFrom(path, evidence);

ただし、Evidence オブジェクトを正しく設定することは気弱な人向けではないことに注意してください。

完全な答えではありませんが、うまくいけばそれにつながるいくつかのアイデア:)

于 2011-06-19T02:59:35.953 に答える
3

David Ebboへの+1-部分的な信頼の下でアプリ全体を実行し、GACedアセンブリからの呼び出しを昇格させることは正しいアプローチにすぎません。

考慮すべきいくつかのポイント...

  • AppDomain間でリモート化されるように設計されているクラスは多くありません。ASP.Netのものはあまりリモート可能ではありません...
  • ASP.Netコントロールには、ランタイムとの統合ポイントが非常に多くあります。潜在的な昇格を回避し、正しいクロスドメインマーシャリングを行うために、コントロールとランタイム間の相互作用を適切に制限するために、非常に興味深いプロキシクラスを構築する必要があります。
  • ドメインの境界を越えて他のアセンブリからクラスを「リーク」するのは簡単です(カスタムの場所からのカスタムロードは、障害をより明確にすることで「リーク」を防ぐのに役立ちます)。ASP.Netのような多くのエテンションポイント(オーバーライド、イベント)でフレームワークを使用すると、オブジェクトをドメイン間で移動させる機会が増えます。
  • これは、プロセスで任意のコードを実行するのに役立ちません。プロセスにロードするだけで、カスタムコードに対する信頼(非CLRセンス)を宣言します。つまり、StackOverflowは、実行権限を持っているだけのコードで実現可能であり、プロセスを比較的ダウンさせます。
于 2011-06-24T06:28:32.253 に答える