2009-12-24 17 views
2

J'ai écrit un gestionnaire de plugins pour mon application, il utilise codedom pour compiler du code C# dans une bibliothèque de classes et instancier ses types. cela fonctionne parfaitement, et maintenant je souhaite limiter les permissions sur l'assembly compilé. Malheureusement, je ne sais pas comment le faire. autant que je comprends, je devrais utiliser CompilerParameters.Evidence d'une certaine manière, mais il n'est pas clair pour moi de la façon dont. Par souci de clarté, je ne veux pas simplement classer l'assigne comme une certaine zone, je veux la limiter à un ensemble d'autorisations qui est passé en argument dans le constructeur des gestionnaires de plugins. Je voudrais aussi mentionner que je ne charge pas l'assembly dans un nouvel appdomin, il est exécuté sur le même domaine que le reste de l'application.Restriction d'un assemblage compilé de codedom

merci.

+0

exactement 1 an plus tard, je pose la même question. Avez-vous eu de la chance de trouver une réponse? – Glenn

+0

Comment faire cela avec .NET Framework 4.0? CompilerParameters.Evidence est obsolète maintenant .. des idées? – user1624552

Répondre

1

Les exemples CodeDOM traitant de la sécurité sont délicats à google. Après plusieurs heures de lecture, j'ai trouvé deux approches.

Le meilleur semble être le Managed Addin Cadre car il est conçu pour exactement votre cas d'utilisation senario. Restrict plug-in assembly code access

CAS (Code Access Security) est également une option, mais il semble être moins populaire et à la sortie. Voici un exemple de cette levée [SO message] [3]

var myEvidence = new Evidence(new object[] {SecurityZone.Internet}); 
var newDomain = AppDomain.CreateDomain("InternetDomain"); 
myDomain.Load("MyUntrustedAssembly.dll", myEvidence); 
myDomain.CreateInstanceAndUnwrap("MyUntrustedAssembly","MyUntrustedObjectType"); 

CAS Références .NET/Security: Limiting runtime-loaded assemblies from accessing certain APIs http://www.gamedev.net/community/forums/topic.asp?topic_id=418038 http://www.go4answers.com/Example/codedom-security-64586.aspx