Прозрачный для системы безопасности код

Система безопасности включает в себя три основных компонента, взаимодействующих друг с другом: изолированные среды, разрешения и компоненты обеспечения безопасности. Технология изолированных сред включает в себя процесс создания изолированных доменов, в которых определенный код рассматривается как код с полным доверием, а другой код ограничивается разрешениями набора, предоставленного изолированной среде. Код приложения, выполняемый с набором разрешений изолированной среды, считается прозрачным (то есть неспособным выполнять действия, влияющие на безопасность). Набор разрешений, предоставленных изолированной среде, определяется свидетельством. Свидетельство определяет разрешения, необходимые для изолированных сред, а также возможные типы создаваемых сред. Технологии обеспечения безопасности позволяют прозрачному коду выполнять только те действия, которые соответствуют набору предоставленных разрешений.

Важное примечаниеВажно

Политика безопасности была ключевым элементом в предыдущих версиях платформы .NET Framework.Начиная с версии .NET Framework 4 политика безопасности считается устаревшей.Устранение политики безопасности выполняется независимо от прозрачности безопасности.Сведения о последствиях этого изменения и советы по миграции см. в разделе Совместимость политики разграничения доступа кода и ее миграция.

Этот раздел подробно описывает модель прозрачности. Он содержит следующие подразделы:

  • Назначение модели прозрачности

  • Указание уровня прозрачности

  • Обеспечение прозрачности

Назначение модели прозрачности

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

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

Важное примечаниеВажно

Модель прозрачности служит не только для управления доступом для кода.Прозрачность обеспечивается JIT-компилятором и действует вне зависимости от набора разрешений, предоставленного сборке (включая полное доверие).

Прозрачность была представлена в платформе .NET Framework версии 2.0 для упрощения модели безопасности и для упрощения создания и развертывания безопасных библиотек и приложений. Прозрачный код также используется в Microsoft Silverlight для упрощения разработки приложений с частичным доверием.

ПримечаниеПримечание

При разработке частично доверенного приложения следует помнить о требованиях безопасности для целевых узлов.Разработчик может создать приложение, использующее ресурсы, не разрешенные некоторыми узлами.Компиляция приложения пройдет без ошибок, но при его загрузке в среду узла возникнет ошибка.Если приложение создано с помощью Visual Studio, можно включить отладку в среде с частичным доверием или с ограниченным набором разрешений из среды разработки.Дополнительные сведения см. в разделе Практическое руководство. Отладка ClickOnce-приложения с ограниченными разрешениями.Функция расчета разрешений, предоставленная для приложений ClickOnce, также доступна для любого приложения с частичным доверием.

К началу

Указание уровня прозрачности

Атрибут уровня сборки SecurityRulesAttribute явным образом выбирает правила SecurityRuleSet, которым будет следовать сборка. Правила организованы в многоуровневую систему, где более высокий уровень обеспечивает более строгое применение правил безопасности.

Возможны следующие уровни:

  • Уровень 2 (Level2) – правила прозрачности .NET Framework 4.

  • Уровень 1 (Level1) – правила прозрачности платформы .NET Framework 2.0.

Основной разницей между двумя уровнями безопасности является то, что уровень 1 не применяет правила безопасности для вызовов извне и предназначен только для обеспечения совместимости.

Важное примечаниеВажно

Прозрачность уровня 1 следует указывать только для совместимости, то есть уровень 1 следует отмечать только в коде, разработанном в платформе .NET Framework 3.5 или ранее и использующем атрибут AllowPartiallyTrustedCallersAttribute или не использующем модель прозрачности.Например, используйте прозрачность уровня 1 для сборок .NET Framework 2.0, которые допускают вызовы от частично доверенных вызывающих объектов (APTCA).Для кода, разработанного в .NET Framework 4, следует использовать прозрачность уровня 2.

Прозрачность уровня 2

Прозрачность второго уровня 2 была представлена в версии .NET Framework 4. Ключевыми элементами этой системы являются следующие компоненты: прозрачный код, надежный с точки зрения безопасности код и критический с точки зрения безопасности код.

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

    • Выполнять действие Assert или повышение привилегий.

    • Содержать небезопасный или непроверяемый код.

    • Напрямую вызывать критический код.

    • Вызывать машинный код или код с атрибутом SuppressUnmanagedCodeSecurityAttribute.

    • Вызывать участников, защищенных с помощью LinkDemand.

    • Наследовать от критических типов.

    Кроме того, прозрачные методы не могут переопределять критические виртуальные методы или реализовывать критические методы интерфейсов.

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

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

Прозрачность уровня 1

Модель прозрачности уровня 1 была представлена в платформе .NET Framework версии 2.0 и позволяла разработчикам сократить объем кода, требующего аудита безопасности. Несмотря на то, что прозрачность уровня 1 стала общедоступной в версии 2.0, она в основном использовалась только в корпорации Майкрософт для аудита безопасности. Заметки позволяют разработчикам объявлять типы и члены, которые могут повышать уровень разрешений и выполнять другие доверенные (критические с точки зрения безопасности) действия, а также типы и члены, которые не могут выполнять такие действия (прозрачные с точки зрения безопасности). Код, определенный как прозрачный, не требует подробного аудита безопасности. Схема прозрачности уровня 1 ограничивает применение прозрачности пределами сборки. Другими словами, все открытые типы или участники, которые считаются критическими с точки зрения безопасности, являются таковыми только в пределах сборки. Чтобы обеспечить безопасность для этих типов и участников, когда они вызываются извне, необходимо использовать запросы на компоновку с полным доверием. В противном случае открытые видимые критические типы и участники рассматриваются как надежные с точки зрения безопасности и могут вызываться частично доверенным кодом вне сборки.

Модель прозрачности уровня 1 имеет следующие ограничения:

  • Открытые критические с точки зрения безопасности типы и участники доступны из прозрачного с точки зрения безопасности кода.

  • Заметки прозрачности применяются только внутри сборки.

  • Критические типы и участники должны использовать запросы на компоновку для обеспечения безопасности при вызовах извне.

  • Правила наследования не применяются.

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

К началу

Обеспечение прозрачности

Правила прозрачности не применяются до вычисления прозрачности. При нарушении правила прозрачности возникает исключение InvalidOperationException. Время расчета прозрачности зависит от различных факторов и не может быть предсказано заранее. Расчет происходит в последний возможный момент. В версии .NET Framework 4 расчет прозрачности уровня сборки выполняется раньше, чем в платформе .NET Framework 2.0. Гарантируется только то, что расчет прозрачности будет выполнен к тому моменту, когда он понадобится. Этот процесс схож с тем, как JIT-компилятор изменяет момент компиляции метода и определения всех ошибок в нем. Расчет прозрачности выполняется без внешних проявлений, если код не имеет ошибок прозрачности.

К началу

См. также

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

Прозрачный с точки зрения безопасности код, уровень 1

Прозрачный с точки зрения безопасности код, уровень 2