0

Microsoft.CSharp.CSharpCodeProvider を使用して、アセンブリをプログラムでコンパイルし、外部 .cs ファイルからいくつかの関数を実行しています。

しかし、これらの機能がファイルシステムなどに変更を加えることを禁止する方法はありますか (何らかのサンドボックスで実行する必要があります)。

CompilerParameters に「-nostdlib」オプションを追加して、結果のアセンブリが System.IO.File や他のクラスにアクセスできないようにすることを考えていました。しかし、System.Object、System.ValueType などが必要です。

現在、次のエラーが発生しています。

error CS0518: The predefined type `System.Object' is not defined or imported
error CS0518: The predefined type `System.ValueType' is not defined or imported
error CS0518: The predefined type `System.Attribute' is not defined or imported
error CS0518: The predefined type `System.Int32' is not defined or imported
... (too many of them)

システムに深刻な損害を与える可能性のあるクラス (System.IO.File、System.IO.Directory、System.Net.(something)、System.Threading.(something) など) なしでこれらのクラスを追加するにはどうすればよいですか?

または、もっと簡単な方法がありますか?ありがとうございました。

4

2 に答える 2

0

これには、コード アクセス セキュリティを使用する必要があります。System.IOなどのコア型へのアクセスを制限せずに型へのプログラムのアクセスを制限することはできませんが、コードが実行時に実行できることを制限することで実行時サンドボックスSystem.Objectを実装できます。

CAS を使用すると、ユーザーの ID またはその他のソースから得られるさまざまな種類の証拠に基づいて、さまざまな種類のコードを実行するためのアクセス許可を割り当てることができます。これにより、コードで実行できることをきめ細かく調整できます。これは、命令型(つまりコードベース) および宣言型(つまり属性ベース) メカニズムの両方で制御できます。

CAS は大きな主題であり、この説明は必然的に簡潔になります。

これに関するMonoおよびMSDNのドキュメントを次に示します。

于 2013-08-07T19:20:56.390 に答える