Прозрачный для системы безопасности код
Система безопасности включает в себя три основных компонента, взаимодействующих друг с другом: изолированные среды, разрешения и компоненты обеспечения безопасности. Технология изолированных сред включает в себя процесс создания изолированных доменов, в которых определенный код рассматривается как код с полным доверием, а другой код ограничивается разрешениями набора, предоставленного изолированной среде. Код приложения, выполняемый с набором разрешений изолированной среды, считается прозрачным (то есть неспособным выполнять действия, влияющие на безопасность). Набор разрешений, предоставленных изолированной среде, определяется свидетельством. Свидетельство определяет разрешения, необходимые для изолированных сред, а также возможные типы создаваемых сред. Технологии обеспечения безопасности позволяют прозрачному коду выполнять только те действия, которые соответствуют набору предоставленных разрешений.
Важно |
---|
Политика безопасности была ключевым элементом в предыдущих версиях платформы .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-компилятор изменяет момент компиляции метода и определения всех ошибок в нем. Расчет прозрачности выполняется без внешних проявлений, если код не имеет ошибок прозрачности.
К началу