1

アセンブリをロードし、そこからクラスをインスタンス化する最も簡単な方法は何ですか?ただし、アセンブリの特権が制限されている(サンドボックス化されている)方法でそうしますか?コードは、ネットワークを介して通信したり、ファイルシステムに書き込んだり、プロセスを実行したりできないようにする必要があります。

UPDATE 私はAssembly.LoadFrom(string assemblyFile、Evidence securityEvidence)に出くわしました。これはまったく使用できますか?私はこの証拠の下にあるのかわからない。

4

2 に答える 2

3

独自のAppDomainにロードする必要があります。

これがプロセス全体を説明する記事です。

于 2009-12-14T16:49:43.183 に答える
1

100%信頼できるわけではありませんが、別のオプションは、コールスタックでCAS拒否トークンに依存することです。

おそらく、ロードされたクラスの最初の初期メソッドは、ユーザーの制御下にあるコードによって呼び出されます。次に、セキュリティの拒否アクションを使用して、メソッドが.NETFrameworkの特定の部分にアクセスするのを防ぐことができます。

コードはこれらの線に沿ったものになります:

[SecurityPermission(SecurityAction.Deny, Flags = SecurityPermissionFlag.NoFlags ^ SecurityPermissionFlag.Assertion)]
void CallExternalAssemblyClass(ExternalClass c)
{
    c.SomeMethod();
}

提案されたソリューションにはいくつかの注意点があります。Silverlightを使用していないことを前提としており、アセンブリが特別に細工されたCILアセンブリを使用して作成された場合、潜在的なセキュリティリスクがあります。

得られる利点は、個別のAppDomainの使用と、複数のAppDomainに関連するマーシャリングの問題を回避できることです。

于 2009-12-15T19:22:46.483 に答える