Как отрицать отражение, используя ReflectionPermission - PullRequest
19 голосов
/ 05 сентября 2011

Я пытаюсь добавить надстройки в свое приложение, но я не хочу, чтобы надстройка вообще использовала отражение, код надстройки может быть изолированной программной средой с использованием Application Domain.

Я нашел AppDomain пример на MSDN, но не имеет ссылок на ReflectionPermision, а также атрибут безопасности Deny устарел, многие атрибуты устарели, как мне тогда остановить отражение? 1005 *

Ответы [ 2 ]

8 голосов
/ 07 сентября 2011

Чтобы использовать AppDomain.CreateDomain для создания изолированного домена приложения, необходимо передать PermissionSet, который содержит только те разрешения, которые вы хотите предоставить изолированным сборкам.Если вы не хотите предоставлять ReflectionPermission, вам просто не следует добавлять его в набор разрешений.

При этом ReflectionPermission далеко не единственное «опасное» разрешение, которое обычно должно быть отказано общему источнику.надстроек.Если вы хотите быть очень строгим, вы можете рассмотреть возможность предоставления только SecurityPermission \ Execution. например, :

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

Если вы хотите включить дополнительные «безопасные» разрешения, вы можете просто добавить их в набор разрешений, используя дополнительные вызовы AddPermission.Если вы хотите включить все разрешения, которые считались достаточно безопасными для предоставления кода из Интернета, в устаревшую систему политик CAS, вы можете извлечь их, передав свидетельство интернет-зоны статическому методу SecurityManager.GetStandardSandbox. например, :

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

PermissionSet permissionSet = SecurityManager.GetStandardSandbox(evidence);

NB : Оба этих подхода описаны в статье MSDN , на которую вы ссылались в своем вопросе.

0 голосов
/ 05 сентября 2011

Согласно документации, ReflectionPermission - это то, что вы предоставляете для доступа к коду частным и защищенным членам.По умолчанию он не предоставляется, и код имеет доступ только для открытых членов.Если вы пытаетесь скрыть общедоступных участников, вам нужно будет создать новый интерфейс, который их не раскрывает.

...