c # - Sådan nægter du refleksion ved brug af ReflectionPermission

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at tilføje addons i min ansøgning, men jeg vil ikke have addon til at bruge refleksion overhovedet, addon-koden kan være sandkasse ved hjælp af Application Domain.


Jeg har fundet et AppDomain-eksempel på MSDN, men har ingen referencer til ReflectionPermision, og også Deny-sikkerhedsattributten afskrives, mange attributter afskrives, hvordan stopper jeg refleksion da? [3]

Bedste reference


Hvis du vil bruge AppDomain.CreateDomain til at oprette et sandboxet appdomæne, skal du bestå i et Tilladelsessæt, der kun indeholder de tilladelser, du vil give til de sandkasseforsamlinger. Hvis du ikke ønsker at give ReflectionPermission, skal du simpelthen ikke tilføje den til tilladelsessættet.


Når det er sagt, er ReflectionPermission langt fra den eneste 'farlige' tilladelse, der normalt bør benægtes til generelle kilde-add-ins. Hvis du vil være meget streng, kan du overveje at give kun SecurityPermission \ Execution. f.eks .:


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


Hvis du vil medtage yderligere 'sikre' tilladelser, kan du blot tilføje dem til tilladelsesindstillingen ved hjælp af yderligere AddPermission-opkald. Hvis du vil inkludere alle tilladelser, der blev betragtet som sikre nok til at blive tildelt internetkilden under undertrykt CAS-politik system, kan du udtrække disse ved at videregive internet-zone bevis til den statiske Metode SecurityManager.GetStandardSandbox. f.eks .:


Evidence evidence = new Evidence();
evidence.AddHostEvidence(new Zone(SecurityZone.Internet));

PermissionSet permissionSet = SecurityManager.GetStandardSandbox(evidence);


N.B. : Begge disse fremgangsmåder er beskrevet i MSDN-artiklen, som du har henvist til i dit spørgsmål. [4]

Andre referencer 1


Ifølge dokumentationen er ReflectionPermission noget, du giver til at give kodeadgang til private og beskyttede medlemmer. Som standard er det ikke givet, og kode har kun adgang til offentlige medlemmer. Hvis du forsøger at skjule de offentlige medlemmer, skal du oprette en ny grænseflade, der ikke udsætter dem. [5]