Знакомство с управлением доступом для кода

Обновлен: Ноябрь 2007

Управление доступом для кода — это механизм, позволяющий ограничить доступ кода к защищенным ресурсам и операциям. В.NET Framework управление доступом для кода выполняет следующие функции.

  • Определяет разрешения и наборы разрешений, предоставляющие право доступа к различным системным ресурсам.

  • Позволяет администраторам настраивать политику безопасности, сопоставляя наборы разрешений с группами кода.

  • Позволяет коду запрашивать как разрешения, необходимые ему для выполнения, так и разрешения, наличие которых было бы полезно, а также указывает, каких разрешений у кода никогда не должно быть.

  • Предоставляет разрешения всем загружаемым сборкам на основании разрешений, запрашиваемых кодом, и операций, разрешенных политикой безопасности.

  • Позволяет коду требовать, чтобы вызывающий его код имел определенные разрешения.

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

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

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

Следующая схема иллюстрирует проверку стека, происходящую, когда метод сборки A4 требует, чтобы его вызывающие объекты обладали разрешением P.

Проверка стека безопасности
Управление доступом для кода

В одном из типичных применений управления доступом для кода приложение загружает элемент управления с веб-узла в локальной интрасети напрямую на клиентскую машину, чтобы пользователь смог ввести данные. Элемент управления построен с использованием установленной библиотеки классов. Ниже приведены несколько способов, делающих возможным использование управления доступом для кода в данном сценарии.

  • Перед загрузкой администратор может настроить политику безопасности, чтобы указать, что коду предоставляются специальные полномочия (большие, чем обычно получает код из локальной интрасети), если у кода имеется определенная цифровая подпись. По умолчанию предопределенный именованный набор разрешений LocalIntranet ассоциируется с любым кодом, загружаемым из локальной интрасети.

  • Во время загрузки среда выполнения предоставляет элементу управления не больше прав, чем ассоциировано с набором разрешений LocalIntranet, если только у элемента управления нет доверенной цифровой подписи. В этом случае ему даются разрешения, ассоциированные с набором разрешений LocalIntranet, и, возможно, некоторые дополнительные разрешения на основании его доверенной подписи.

  • Во время выполнения, когда вызывающий объект (в данном случае — используемый элемент управления) производит доступ к библиотеке, предоставляющей защищенные ресурсы, или к библиотеке, вызывающей неуправляемый код, библиотека создает требование безопасности, заставляющее проверять разрешения вызывающих объектов на наличие соответствующих разрешений. Эти проверки безопасности запрещают элементу управления производить несанкционированные действия на компьютере клиента.

См. также

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

Управление доступом для кода