我有一个 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
}
}
}
然后加载动态程序集并通过反射执行 Evaluate 方法。这很好用。
问题是恶意代码注入的可能性很大,所以我想在“沙盒”线程中运行 Evaluate 方法(没有任何非托管 API 调用)。出于测试目的,我使用了内置的匿名 Windows 用户,并提供了以下代码:
Thread tSandbox = new Thread(
new ParameterizedThreadStart(this.DoSandboxedEvaluation));
WindowsIdentity tIdentity = WindowsIdentity.GetAnonymous();
WindowsPrincipal tPrincipal = new WindowsPrincipal(i);
这给了我匿名用户的身份和主体。如何将其应用于线程 tSandbox,以便该线程上的代码在指定的安全上下文中运行,而不使用非托管 API 调用?
谢谢!