Ich habe eine C# -Anwendung, die eine Laufzeitkompilierung von Quelldateien durchführt, die Berechnungen in dynamische Assemblys enthalten. Offensichtlich stellt dies ein ernsthaftes Sicherheitsproblem dar.Kann ein Thread als ein anderer Benutzer ausgeführt werden? (.NET 2.0/3.5)
Aus der folgenden 'Formel', würde der folgende Code erzeugt werden, und eine dynamische Assembly erstellt:
Formel:
Int32 _index = value.LastIndexOf('.');
String _retVal = value.Substring(_index + 1);
return _retVal;
generierter Code:
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
}
}
}
Die dynamische Montage wird dann geladen und die Methode Evaluate wird über Reflection ausgeführt. Das funktioniert großartig.
Das Problem ist, dass das Potenzial für die Injektion von bösartigem Code ist riesig, also möchte ich die Evaluate-Methode in einem "Sandboxed" -Thread ausführen (ohne API-Aufrufe nicht verwaltet). Zu Testzwecken verwende ich die in Anonymous Windows-Benutzern gebaut und habe mit dem folgenden Code kommen:
Thread tSandbox = new Thread(
new ParameterizedThreadStart(this.DoSandboxedEvaluation));
WindowsIdentity tIdentity = WindowsIdentity.GetAnonymous();
WindowsPrincipal tPrincipal = new WindowsPrincipal(i);
Das gibt mir die anonymen Benutzer Identität und Auftraggeber. Wie kann dies auf Thread tSandbox angewendet werden, sodass der Code in diesem Thread im angegebenen Sicherheitskontext ausgeführt wird, ohne Verwendung von Unmanaged API-Aufrufen?
Danke!
Related post [hier] (https: //stackoverflow.com/questions/2608194/how-doi-i-start-a-thread-in-a-different-security-context) – RBT