動的アセンブリへの計算を含むソース ファイルのランタイム コンパイルを実行する C# アプリケーションがあります。明らかに、これは深刻なセキュリティ上の問題を引き起こします。
次の「式」から、以下のコードが生成され、動的アセンブリが作成されます。
方式:
Int32 _index = value.LastIndexOf('.');
String _retVal = value.Substring(_index + 1);
return _retVal;
生成されたコード:
using System;
namespace Dynamics
{
public class Evaluator
{
public Object Evaluate(String value)
{
// Begin external code
Int32 _index = value.LastIndexOf('.');
String _retVal = value.Substring(_index + 1);
return _retVal;
// End external code
}
}
}
次に、動的アセンブリが読み込まれ、Reflection を介して Evaluate メソッドが実行されます。これはうまくいきます。
問題は、悪意のあるコード インジェクションの可能性が非常に高いことです。そのため、「サンドボックス化された」スレッドで Evaluate メソッドを実行したいと考えています (アンマネージ API 呼び出しなし)。テスト目的で、組み込みの匿名 Windows ユーザーを使用しており、次のコードを作成しました。
Thread tSandbox = new Thread(
new ParameterizedThreadStart(this.DoSandboxedEvaluation));
WindowsIdentity tIdentity = WindowsIdentity.GetAnonymous();
WindowsPrincipal tPrincipal = new WindowsPrincipal(i);
これにより、匿名ユーザーの ID とプリンシパルが得られます。アンマネージ API 呼び出しを使用せずに、指定されたセキュリティ コンテキストでそのスレッドのコードが実行されるように、これをスレッド tSandbox にどのように適用できますか?
ありがとう!