2009-05-31 4 views
1

Es ist nicht schwer für mich, Code zu Temp-Ordner zu speichern, verwenden Sie csc.exe, um es zu kompilieren und laden Sie die Assembly dynamisch, aber wie kann ich den Code mit eingeschränkten Berechtigungen ausführen?Wie kann ich C# -Code mit eingeschränkten Berechtigungen dynamisch kompilieren und ausführen?

Zum Beispiel, wie kann ich den Code verbieten ...

  • Schaffung neuer Threads.
  • irgendwelche E/A-Operationen.
  • Gewährung höherer Berechtigungen.
  • Sammeln von Informationen des Systems.
  • Ausführung toter Zyklus (Nun, es geht nicht um Sicherheit).
  • Verwenden Sie zu viel Speicher.
  • andere dangrous Dinge ...

Alle Informationen (Blog/Artikel/Papier/manual ...) begrüßt.

Antwort

3

Sie müssen die Assembly wahrscheinlich in eine andere AppDomain laden, die Sie erstellen, indem Sie ihr die gewünschten Berechtigungen geben. Im Allgemeinen werden Assemblys, die in die Standard-AppDomain geladen werden, die Berechtigungen an diese AppDomain delegiert. Durch das Erstellen einer weiteren Anwendungsdomäne haben Sie vollständige Kontrolle darüber, welche Berechtigungen die Anwendungsdomäne erhält, die sich auf die darin geladenen Baugruppen ausdehnt.

Eine Einschränkung ist jedoch, dass Aufrufe von Code in einer anderen AppDomain gemarshallt werden müssen, was die Leistung etwas beeinträchtigt.

Die folgenden Artikel sollten Ihnen helfen, sich:

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

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

0

Es gibt zwei Möglichkeiten, um diese suchen; der erste ist über einen AppDomain mit separatem Vertrauen, worüber jrista eine gute Antwort gegeben hat. Die zweite lautet: kompilieren Sie keinen beliebigen/Benutzercode; -p Je nach Szenario können Sie möglicherweise eine DSL mit Zugriff auf nur die Funktionalität erstellen, die Sie gerne zur Verfügung stellen, und kompilieren , dass. Ich habe diesen Ansatz mehrmals erfolgreich angewendet. Dies erzeugt eine sehr kontrollierte Sandbox - das einzige, was zu beobachten ist, sind Dinge wie Endlosschleifen, aber selbst das ist reparierbar, wenn Sie wirklich brauchen.

Also ich denke, die eigentliche Frage ist: hat die Eingabe C# zu sein? Oder ist das nur eine Annehmlichkeit?

0

IMO, der Start ist ein Gast Benutzerkonto erstellen, um den Prozess unter laufen zu lassen. Dann folgen Sie den weiteren Schritten.

+0

Ein anderes Benutzerkonto verhindert nicht (aus der Frage) Thread-Erstellung, Speicherüberlastung, IO (aus öffentlichen Bereichen), System-Info-Sammlung (von nicht-priveleged Daten), etc ... –

+0

Nun, es deckt den Teil "andere gefährliche Dinge" ab :) – leppie

Verwandte Themen