Hello World !
J'ai codé une petite lib de moteur de plugins. Elle fonctionne nickel, mais pour pouvoir ajouter de la sécurité, je veux gérer les permissions de chaque plugin "à la main" (dynamiquement en fonction du plugin). On peut dire que ça serait analogue à la sandbox de ClickOnce.
Pour expliquer comment ma lib fonctionne :
- J'ai une classe de gestion des plugins (un "serveur")
- Chaque plugin est chargé dans son propre AppDomain, avec des autorisations restreintes pour limiter les failles de sécurité.
Dans ma version actuelle, les persmissions sont codées en dur :
Ce que je voudrai, c'est arriver à gérer les demandes de permissions à la main, dans le style : Quand le plugin demande une permission, si elle n'est pas déjà accordée, on vérifie si l'application a l'autorisation. Si elle n'a pas l'autorisation, ne pas l'accorder au plugin, sinon, vérifier si le plugin a le droit d'avoir cette permission. Si oui, alors l'accorder, sinon la refuser.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 //Set file as "Load a shadow copy" AppDomainSetup info = new AppDomainSetup(); info.ShadowCopyFiles = true.ToString(); info.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; //Set permisions to "None" PermissionSet perms = new PermissionSet(PermissionState.None); perms.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); //Create new application domain AppDomain domain = AppDomain.CreateDomain(pluginDefinition.ReflectedAssembly.Location, null, info, perms);
Mes quelques jours de recherche m'ont conduit à une piste assez complexe me disant que je dois changer de SecurityManager et de AppDomainManager, et pour faire ça, je doit changer deux variables d'environnement.
Si quelqu'un a une piste à me proposer pour arriver à faire tourner un assembly dans un bac à sable (ou sandbox) "à la ClickOnce", je suis prenneur.
Merci d'avance.
Partager