나는 동적 어셈블리에 계산을 포함하는 소스 파일의 런타임 컴파일을 수행하는 C# 응용 프로그램을 가지고 있습니다. 분명히 이것은 심각한 보안 문제를 야기합니다. 다음 '식'에서 스레드를 다른 사용자로 실행할 수 있습니까? (.NET 2.0/3.5)
, 아래의 코드가 생성 될 것이고, 동적 어셈블리 생성 :화학식 :
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 메서드가 실행됩니다. 위대한 작품.
문제는 악의적 인 코드 삽입의 가능성이 높기 때문에 관리되지 않는 API 호출없이 '샌드 박스'스레드에서 Evaluate 메소드를 실행하려고합니다. 는 테스트를 위해 나는 익명 Windows 사용자 내장 사용하고, 다음과 같은 코드로 올라와있다 :
Thread tSandbox = new Thread(
new ParameterizedThreadStart(this.DoSandboxedEvaluation));
WindowsIdentity tIdentity = WindowsIdentity.GetAnonymous();
WindowsPrincipal tPrincipal = new WindowsPrincipal(i);
이 나에게 익명의 사용자 ID 및 교장을 제공합니다. 이 스레드의 코드가 관리되지 않는 API 호출을 사용하지 않고 지정된 보안 컨텍스트에서 실행되도록 어떻게 tSandbox 스레드에 적용 할 수 있습니까?
감사합니다.
관련 게시물 [https : //stackoverflow.com/questions/2608194/how-do-i-start-a-thread-in-a-different-security-context) – RBT