Прозрачные для безопасности сборки не должны содержать критичный для безопасности код
Обновлен: Ноябрь 2007
TypeName |
SecurityTransparentAssembliesShouldNotContainSecurityCriticalCode |
CheckId |
CA2127 |
Категория |
Microsoft.Security |
Критическое изменение |
Критическое |
Причина
В сборке, прозрачной на 100 %, не может содержаться критический код.
Описание правила
Данное правило анализирует сборки, прозрачные на 100 %, в поисках аннотаций SecurityCritical на уровне типов, полей и методов. Данное правило очень полезно, поскольку помечает флагами код, который содержится в прозрачной на 100 % сборке. Во время выполнения критический код в прозрачной на 100 % сборке вызывает исключение безопасности или непредвиденное поведение.
В версии .NET Framework 2.0 представлена новая функция, называемая прозрачность. Отдельные методы, поля, интерфейсы, классы и типы могут быть либо прозрачными, либо критическими.
При повышении привилегий безопасности использование прозрачного кода не допускается. Поэтому, все разрешения, которые предоставляются этому коду или требуются от него, автоматически передаются через код вызывающему объекту или ведущему приложению AppDomain. Примерами "повышения" привилегий могут служить утверждения, проверки LinkDemand, атрибут SuppressUnmanagedCode или "небезопасный" код.
Сборка может быть на 100 % прозрачной, на 100 % критической или содержащей смешанный прозрачный и критический код.
Чтобы пометить сборку как прозрачную на 100 %, добавьте следующий атрибут уровня сборки:
[assembly:System.Security.SecurityTransparent]
Чтобы пометить сборку как критическую на 100 %, добавьте следующий атрибут уровня сборки:
[assembly:System.Security.SecurityCritical(System.Security.SecurityCriticalScope.Everything)]
Чтобы пометить сборку как смешанную прозрачную/критическую, добавьте следующий атрибут уровня сборки:
[assembly:System.Security.SecurityCritical]
Прозрачный код не может содержаться в критической на 100 % сборке, а критический код не может содержаться в прозрачной на 100 % сборке.
Предотвращение нарушений
Чтобы устранить эту проблему, либо пометьте сборку как содержащую смешанный прозрачный и критический код, либо удалите атрибут SecurityCritical из помеченного флагом кода.
Отключение предупреждений
Не следует отключать вывод сообщений о нарушении данного правила.