С#: Что такое частично доверенные абоненты?

Я не видел, чтобы это четко обозначалось на одной странице: частично доверенные вызывающие.

Я изучаю APTCA, и это всегда упоминается, но MSDN не имеет статьи об этом.

У меня было несколько подсказок, но я не уверен на 100%.

  • Код, выполняемый из сетевого ресурса, квалифицируется как "частично доверенные вызывающие"? Даже если мы запустим его как администратор (Windows UAC)?
  • Какими другими способами приложение .NET работает как "частично доверенное"?
  • Что такое "частично доверенные вызывающие" в среде ASP.net?

Я столкнулся со многими статьями, в которых упоминается бизнес о частично доверенных абонентах, но нет прямого определения того, что они сами по себе.

Ответ 1

Любой вызывающий, имеющий уровень доверия, отличный от FullTrust, является вызывающим с частичным доверием.

Из библиотеки MSDN для класса AllowPartiallyTrustedCallersAttribute:

Позволяет сборке вызываться частично доверенным кодом. Без этого объявления только полностью доверенные пользователи могут использовать сборку.

Поэтому, если вы создаете библиотеку, которая будет использоваться любой сборкой без уровня FullTrust, вы должны явно объявить ее с помощью APTCA (AllowPartiallyTrustedCallersAttribute).

Тогда как он определяется, когда приложение работает как полное или частичное доверие?

Уровень доверия связан с доменом приложения и определяется на основе того, что называется доказательством. Это все часть .NET Code Access Security. В этой статье представлен большой обзор его компонентов. Оттуда:

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

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

  • FullTrust: разрешить полный доступ ко всем ресурсам.
  • Все: разрешить полный доступ ко всем ресурсам (группа не добавляется в список сборок)
  • Интернет: предоставить права по умолчанию.
  • SkipVerification: обойти все проверки безопасности
  • Ничего: запрещает любой доступ, включая выполнение
  • Выполнение: разрешает доступ только для выполнения.

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

Тем не менее, .NET 4 внес значительные изменения в систему безопасности:

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

На самом деле, большая часть CAS устарела, за исключением изолированных приложений, таких как ASP.NET и ClickOnce:

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

Таким образом, после изменений в .NET 4 также изменилась безопасность ASP.NET 4, и приложения ASP.NET по умолчанию являются полностью доверенными приложениями. Однако это можно изменить в конфигурации, установив для атрибута trustLevel значение, отличное от Full.

Подводя итог, можно сказать, что из .NET 4 и выше вы можете предположить, что ваше приложение по умолчанию работает как Full Trust, за исключением того, что вы включили CAS через LegacyCasPolicy в файле конфигурации. То же самое относится и к приложениям ASP.NET, если вы не согласились установить другой уровень доверия.