Comment refuser la reflection à l’aide de ReflectionPermission

J’essaye d’append des addons dans mon application, mais je ne veux pas que l’addon utilise la reflection du tout, le code addon peut être sandbox en utilisant le domaine d’application.

J’ai trouvé un exemple AppDomain à MSDN, mais n’a aucune référence pour ReflectionPermision, et l’atsortingbut de sécurité Deny est également déprécié, de nombreux atsortingbuts sont dépréciés, comment puis-je arrêter la reflection?

Pour utiliser AppDomain.CreateDomain pour créer un domaine d’application en mode bac à sable, vous devez transmettre un PermissionSet qui contient uniquement les permissions que vous souhaitez accorder aux assemblys en bac à sable. Si vous ne voulez pas accorder ReflectionPermission, vous ne devez simplement pas l’append à l’ensemble d’permissions.

Cela dit, ReflectionPermission est loin d’être la seule autorisation “dangereuse” qui devrait normalement être refusée aux compléments de source générale. Si vous souhaitez être très ssortingct, vous pouvez envisager de n’accorder que SecurityPermission \ Execution. par exemple :

PermissionSet permissionSet = new PermissionSet(PermissionState.None); permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); 

Si vous souhaitez inclure des permissions “sûres” supplémentaires, vous pouvez simplement les append à l’ensemble d’permissions à l’aide d’appels AddPermission supplémentaires. Si vous souhaitez inclure toutes les permissions considérées comme suffisamment sûres pour être atsortingbuées au code Internet sous le système de règles CAS déprécié, vous pouvez les extraire en transmettant des preuves de zone Internet à la méthode statique SecurityManager.GetStandardSandbox. par exemple :

 Evidence evidence = new Evidence(); evidence.AddHostEvidence(new Zone(SecurityZone.Internet)); PermissionSet permissionSet = SecurityManager.GetStandardSandbox(evidence); 

NB : Ces deux approches sont décrites dans l’ article MSDN auquel vous avez fait référence dans votre question.

Selon la documentation, ReflectionPermission est quelque chose que vous accordez pour donner access au code aux membres privés et protégés. Par défaut, il n’est pas accordé et le code n’a access qu’aux membres publics. Si vous essayez de masquer les membres publics, vous devez créer une nouvelle interface qui ne les expose pas.