Разрешения безопасности

Среда CLR позволяет коду выполнять только те операции, на выполнение которых у кода есть разрешение. Среда выполнения использует объекты, называемые разрешениями, для наложения ограничений на управляемый код. В среде выполнения предусмотрены встроенные классы разрешений в нескольких пространствах имен, а также поддерживается проектирование и реализация нестандартных классов разрешений.

Существуют два вида разрешений, каждый из которых имеет особое назначение.

Разрешения безопасности могут определяться в форме класса разрешений (принудительная безопасность) или в виде атрибута, представляющего класс разрешений (декларативная безопасность). Базовым классом для разрешений безопасности является System.Security.CodeAccessPermission; базовый класс для атрибутов разрешений безопасности — System.Security.Permissions.CodeAccessSecurityAttribute.

Приложению, имеющему форму сборок, предоставляется набор разрешений во время его загрузки в домен приложения. Предоставление обычно выполняется с помощью заранее заданных наборов разрешений, определяемых методом SecurityManager.GetStandardSandbox. Предоставленный набор определяет разрешения, которые код получает для доступа к ресурсам. Среда выполнения предоставляет разрешения на основе исходного расположения кода (например, локальный компьютер, локальная интрасеть или Интернет). Если код загружен в песочницу, ему также могут быть предоставлены особые разрешения. Дополнительные сведения о запуске кода в "песочнице" см. в разделе Практическое руководство. Выполнение не вполне безопасного кода в изолированной среде.

Разрешения используются следующим образом.

  • Для кода библиотеки могут требоваться определенные разрешения у вызывающих его объектов. Если разместить в коде требование Demand для разрешения, то предполагается, что любой код, использующий данный код, может быть выполнен только при наличии этого разрешения. Требования можно использовать для определения наличия у вызывающего кода доступа к определенным ресурсам или для обнаружения удостоверения вызывающего кода.

  • Код может использовать разрешения, чтобы отказывать в доступе к ресурсам, которые необходимо защитить. С помощью SecurityAction.PermitOnly можно указать ограниченный набор разрешений, неявно исключая все другие разрешения. Однако не рекомендуется использовать PermitOnly для запрета доступа с целью защиты от преднамеренного злоумышленного использования. Вызванные сборки, в предоставленных наборах которых имеются неявно запрещенные разрешения, могут переопределять эти разрешения посредством выполнения SecurityAction.Assert для любых разрешений, которые им требуются. Например, если предоставлено только разрешение UIPermission и вызвана сборка, по свой природе имеющая разрешение FileIOPermission, эта сборка может просто выполнить Assert для FileIOPermission и выполнять операции с файлами. Единственным безопасным способом защиты ресурсов от ненадежного кода в вызываемых сборках является выполнение этого кода с представленным набором, которые не содержит этих разрешений.

См. также

Основные понятия

Разрешения для доступа к коду

Разрешения безопасности на основе ролей

Другие ресурсы

Основные понятия безопасности