Использование библиотек из не вполне надежного кода

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

Если загружаемые из среды выполнения приложения не обладают полным уровнем доверия, система управления доступом для кода не может вызвать общие управляемые библиотеки, если автором библиотеки не указано использование атрибута AllowPartiallyTrustedCallersAttribute Class. Таким образом, авторы приложений должны иметь в виду, что некоторые библиотеки будут им недоступны в не вполне надежном контексте. По умолчанию весь код, выполняемый из зон локальной интрасети или Интернета, является не вполне надежным. Если предполагается, что код не будет запускаться из не вполне надежного контекста или вызываться не вполне надежным кодом, то информация, предлагаемая в этом разделе, не представляет интереса. Однако при написании кода, который должен взаимодействовать с не вполне надежным кодом или работать из не вполне надежного контекста, необходимо принимать во внимание следующие факторы.

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

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

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

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

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

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

Библиотеки, являющиеся собственными для определенного приложения, не требуют наличия строгого имени или атрибута AllowPartiallyTrustedCallersAttribute и не могут быть доступны по ссылке со стороны потенциально вредоносного кода извне приложения. Такой код защищен от преднамеренного или непреднамеренного использования не по назначению не вполне надежным мобильным кодом, без дополнительных усилий со стороны разработчика или администратора.

Необходимо предусмотреть явное разрешение использования не вполне надежным кодом для следующих типов кода.

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

  • Строго именованные библиотеки, специально написанные для не вполне надежных сценариев.

  • Любые компоненты (вполне или не вполне надежные), подписанные строгим именем, которые будут вызываться мобильным кодом, загружаемым из Интернета или локальной интрасети. Действие распространяется на эти компоненты, так как при использовании политики безопасности по умолчанию мобильный код получает частичное доверие.

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

    8skskf63.alert_note(ru-ru,VS.90).gifПримечание.

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

См. также

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

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