2010-11-15 5 views
1

Je permets aux utilisateurs de mon application d'exécuter des extraits de C# pour pouvoir manipuler directement certains objets dans mes assemblées sans avoir à écrire une grande couche d'interface de script pour exposer explicitement tout.Comment puis-je limiter les autorisations de sécurité d'un assembly, mais pas celles de ses sites?

Ce code sera injecté dans un assembly compilé dynamiquement, donc je peux contrôler l'assembly lui-même, mais j'ai besoin d'arrêter le code accédant à mes méthodes privées en utilisant la réflexion.

J'ai essayé d'appeler securityPermissionObject.Deny() juste avant d'exécuter le code, mais cela bloque les méthodes sur mes objets d'utiliser la réflexion (que certains font) lorsqu'ils sont appelés par le code de l'utilisateur.

Existe-t-il un moyen de restreindre les autorisations uniquement sur l'assembly suspect sans affecter les méthodes publiques qu'il appelle sur mes assembly approuvés?

Répondre

1

Essayez de créer un nouveau domaine d'application. Et l'utiliser comme un bac à sable. Dans ce bac à sable, vous pouvez charger votre assemblage.

Here est un exemple.

Bien sûr, parce que vous avez maintenant deux domaines d'application, cela complique un peu la communication. Vous pouvez envisager un Webservice via un canal ou d'autres mécanismes de communication.

Here est un article sur la façon dont deux domaines d'application peuvent communiquer.

+0

Cela semble être le seul moyen viable de contrôler les restrictions d'autorisation assez bien, dommage qu'il soit nécessaire d'exposer explicitement chaque méthode sûre à l'extérieur du bac à sable avec une certaine forme de communication. – mentlegen

0

(une vieille question, ne sais pas si vous avez encore besoin d'une réponse)

Lorsque les appels reviennent dans vos méthodes publiques, la première chose que vous devez faire est de désinfecter soigneusement les paramètres, et rejettent toute mauvaise appels. Après cela, vous pouvez ajouter un appel à Assert pour RelectionPermission. Cela permet fondamentalement tout code que vous appelez qui nécessite une réflexion pour être satisfait, et ne pas voir le refus plus haut dans la pile d'appels.

Questions connexes