Использование библиотек из не вполне надежного кодаUsing Libraries from Partially Trusted Code

Внимание!

Управление доступом для кода и частично доверенный кодCode Access Security and Partially Trusted Code

Платформа .NET Framework предоставляет механизм для принудительного применения различных уровней доверия к разным частям кода, выполняемым в одном и том же приложении. Этот механизм называется управлением доступом для кода.The .NET Framework provides a mechanism for the enforcement of varying levels of trust on different code running in the same application called Code Access Security (CAS). Управление доступом для кода в .NET Framework не следует использовать в качестве механизма обеспечения границ безопасности на основе происхождения кода или других аспектов, связанных с удостоверениями.Code Access Security in .NET Framework should not be used as a mechanism for enforcing security boundaries based on code origination or other identity aspects. Мы обновляем рекомендации с учетом того, что управление доступом для кода и прозрачный для системы безопасности код не будут поддерживаться в качестве механизма безопасности при работе с частично доверенным кодом, особенно с кодом неизвестного происхождения.We are updating our guidance to reflect that Code Access Security and Security-Transparent Code will not be supported as a security boundary with partially trusted code, especially code of unknown origin. Мы не рекомендуем загружать и выполнять код из неизвестных источников, не предприняв дополнительные меры безопасности.We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Эта политика действует в отношении всех версий платформы .NET Framework, кроме платформы .NET Framework в составе Silverlight.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

Примечание

В этом разделе рассматривается поведение сборок со строгими именами и применяется только к сборкам уровня 1 .This topic addresses the behavior of strong-named assemblies and applies only to Level 1 assemblies. Строгие имена не зависят от кода, прозрачного для системы безопасности, сборки уровня 2 в .NET Framework 4 или более поздней версии.Security-Transparent Code, Level 2 assemblies in the .NET Framework 4 or later are not affected by strong names. Дополнительные сведения об изменениях в системе безопасности см. в разделе изменения безопасности.For more information about changes to the security system, see Security Changes.

Приложения, которые не получают полное доверие со стороны узла или песочницы, не могут вызывать общие управляемые библиотеки, если только автор библиотеки не разрешил это специально при помощи атрибута AllowPartiallyTrustedCallersAttribute.Applications that receive less than full trust from their host or sandbox are not allowed to call shared managed libraries unless the library writer specifically allows them to through the use of the AllowPartiallyTrustedCallersAttribute attribute. Таким образом, авторы приложений должны иметь в виду, что некоторые библиотеки будут им недоступны в контексте частичного доверия.Therefore, application writers must be aware that some libraries will not be available to them from a partially trusted context. По умолчанию весь код, выполняемый в песочнице с частичным доверием и не включен в список сборок с полным доверием, является частично доверенным.By default, all code that executes in a partial-trust sandbox and is not in the list of full-trust assemblies is partially trusted. Если не предполагается, что код будет запускаться в частично доверенном контексте или вызываться кодом с частичным доверием, данный раздел можно игнорировать.If you do not expect your code to be executed from a partially trusted context or to be called by partially trusted code, you do not have to be concerned about the information in this section. Однако при написании кода, который должен взаимодействовать с частично доверенным кодом или работать из частично доверенного контекста, следует учитывать следующие факторы.However, if you write code that must interact with partially trusted code or operate from a partially trusted context, you should consider the following factors:

  • Библиотеки должны быть подписаны строгим именем, чтобы их могли совместно использовать несколько приложений.Libraries must be signed with a strong name in order to be shared by multiple applications. Строгие имена позволяют помещать код в глобальный кэш сборок или добавлять его в список полного доверия песочницы AppDomain, а также позволяют потребителям удостовериться, что данный фрагмент мобильного кода действительно исходит от вас.Strong names allow your code to be placed in the global assembly cache or added to the full-trust list of a sandboxing AppDomain, and allow consumers to verify that a particular piece of mobile code actually originates from you.

  • По умолчанию общие библиотеки уровня 1 со строгим именем выполняют неявную проверку LinkDemand для полного доверия автоматически, без необходимости выполнять какие-либо действия с модулем записи библиотеки.By default, strong-named Level 1 shared libraries perform an implicit LinkDemand for full trust automatically, without the library writer having to do anything.

  • Если вызывающий объект не имеет полного доверия, однако пытается вызывать такую библиотеку, среда выполнения создает SecurityException, а вызывающему объекту запрещается связь с библиотекой.If a caller does not have full trust but still tries to call such a library, the runtime throws a SecurityException and the caller is not allowed to link to the library.

  • Чтобы отключить автоматический LinkDemand и предотвратить возникновение исключения, можно поместить атрибут AllowPartiallyTrustedCallersAttribute в область сборки общей библиотеки.In order to disable the automatic LinkDemand and prevent the exception from being thrown, you can place the AllowPartiallyTrustedCallersAttribute attribute on the assembly scope of a shared library. Этот атрибут позволяет вызывать библиотеки из частично доверенного управляемого кода.This attribute allows your libraries to be called from partially trusted managed code.

  • На частично доверенный код, получающий доступ к библиотеке при помощи этого атрибута, по-прежнему налагаются дополнительные ограничения, определяемые AppDomain.Partially trusted code that is granted access to a library with this attribute is still subject to further restrictions defined by the AppDomain.

  • Программного способа для частично доверенного кода не существует, чтобы вызвать библиотеку, которая не имеет атрибута AllowPartiallyTrustedCallersAttribute .There is no programmatic way for partially trusted code to call a library that does not have the AllowPartiallyTrustedCallersAttribute attribute.

Для библиотек, которые являются частными для конкретного приложения, не требуется строгое имя или атрибут AllowPartiallyTrustedCallersAttribute и на него нельзя ссылаться потенциально вредоносный код за пределами приложения.Libraries that are private to a specific application do not require a strong name or the AllowPartiallyTrustedCallersAttribute attribute and cannot be referenced by potentially malicious code outside the application. Такой код защищен от преднамеренного или непреднамеренного неправильного использования со стороны мобильного кода с частичным доверием, и никаких дополнительных действий со стороны разработчика не требуется.Such code is protected against intentional or unintentional misuse by partially trusted mobile code without the developer having to do anything extra.

Рекомендуется явно разрешить использование частично доверенным кодом для следующих типов кода.You should consider explicitly enabling use by partially trusted code for the following types of code:

  • Код, который тщательно проверен на наличие уязвимостей в системе безопасности и соответствует рекомендациям, описанным в разделе рекомендации по обеспечению безопасного программирования.Code that has been diligently tested for security vulnerabilities and is in compliance with the guidelines described in Secure Coding Guidelines.

  • Строго именованные библиотеки кода, специально написанные для частично доверенных сценариев.Strong-named code libraries that are specifically written for partially trusted scenarios.

  • Все компоненты (с частичным или полным доверием), подписанные строгим именем, которые будут вызываться кодом, скачанным из Интернета.Any components (whether partially or fully trusted) signed with a strong name that will be called by code that is downloaded from the Internet.

Примечание

Некоторые классы в библиотеке классов .NET Framework не имеют атрибута AllowPartiallyTrustedCallersAttribute и не могут вызываться частично доверенным кодом.Some classes in the .NET Framework class library do not have the AllowPartiallyTrustedCallersAttribute attribute and cannot be called by partially trusted code.

См. такжеSee also