2009-05-31 11 views
1

一時フォルダにコードを保存することは難しくありません。csc.exeを使用してコンパイルしてアセンブリを動的にロードするのですが、どうすれば制限付きのアクセス許可でコードを実行できますか?例えば制限付きのアクセス許可でC#コードを動的にコンパイルして実行するにはどうすればよいですか?

、どのように私は、新しいスレッドを作成

  • ...からコードを禁止することができます。
  • I/O操作を行う。
  • より高い権限を付与します。
  • システムの情報を収集します。
  • デッドサイクルを実行しています(これはセキュリティに関するものではありません)。
  • メモリが多すぎます。
  • 他dangrousもの...

どれ情報(ブログ/記事/紙/マニュアルが...)歓迎されます。

答えて

3

アセンブリを別のAppDomainに読み込む必要があります。作成したAppDomainには、必要なアクセス許可が与えられます。通常、既定のAppDomainに読み込まれたアセンブリは、そのAppDomainに委任されたアクセス許可を持ちます。別のAppDomainを作成することによって、AppDomainがどのようなアクセス許可を与えられているかを完全に制御することができます.AppDomainは、読み込まれたアセンブリに伝播します。

ただし、別のAppDomainにロードされたコードの呼び出しをマーシャリングする必要があるため、パフォーマンスに多少の影響があります。

以下の記事は、あなたが始めるのに役立つはずです。

http://blogs.msdn.com/shawnfa/archive/2004/10/25/247379.aspx

http://blogs.msdn.com/shawnfa/archive/2004/10/22/246549.aspx

0

この見ての二つの方法があります。最初はAppDomainを経由しており、jristaが良い回答を出しています。第二は、次のとおりです。シナリオに応じて任意/ユーザコード;-pをコンパイルしていない、あなたが公開に満足している、とことをコンパイルするだけの機能にアクセスできるDSLを構築することができるかもしれません。私はこのアプローチを何度も成功裏に使用してきました。これにより、非常に制御されたサンドボックスが作成されます。無限ループのようなものは唯一のものですが、の場合は実際にはが必要です。

実際の質問は次のとおりです。入力にはがあると思いますか?それとも便利なの?

0

IMOでは、プロセスを実行するゲストユーザーアカウントを作成します。次に、追加の手順に従います。

+0

別のユーザーアカウントなど、IO(非privelegedデータの)(パブリックエリアから)、システム情報収集、(質問から)過剰使用メモリをスレッドの作成を防ぐことはできません... –

+0

まあそれは、 '他の危険なもの'の部分をカバーしています:) – leppie

関連する問題