Написание безопасных управляемых элементов управления

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

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

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

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

Код из интрасети обладает несколько более широкими разрешениями. Дополнительные сведения см. в разделе Политика безопасности по умолчанию. Если элементу управления требуется осуществлять доступ к файлам, использовать базы данных, собирать сведения о клиентском компьютере и т. д., ему необходим несколько более высокий уровень доверия.

Разработка

Элементы управления с высоким уровнем доверия предназначены для выполнения в условиях менее строгой политики безопасности, чем та, которая обычно применяется к объектам, полученным из того же источника (интрасеть или Интернет). Большинство требований разрешений, запрашиваемых безопасными библиотеками, такими как классы .NET Framework, выполняют проверки стека, в ходе которых просматриваются все вызывающие объекты с целью проверки наличия у них требуемых разрешений и подтверждения того, что вызывающими объектами считаются веб-страницы, а не управляемый код. Проверки стека выполняются с целью воспрепятствовать попыткам кода с более низким уровнем доверия заставлять код с высоким уровнем доверия выполнять вредоносные действия.

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

Элементы управления с высоким уровнем доверия должны разумно использовать вызовы Assert для сокращения проверок стека для разрешений, которые их вызывающие объекты (веб-страницы, с которых они были запущены) обычно не имеют. Вызовы Assert нужно использовать осторожно, чтобы не предоставить доступ к небезопасным интерфейсам API, которые могут позволить вредоносным веб-страницам выполнять некорректные операции. Поэтому при написании элементов управления с высоким уровнем доверия необходимо соблюдать почти такую же осторожность и обладать почти такими же познаниями в области безопасности, как и при написании безопасных библиотек классов.

Ниже приводится ряд советов по написанию безопасных управляемых элементов управления

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

  • Если структура элемента управления требует открытого доступа к выполняемым им операциям с высоким уровнем доверия, следует рассмотреть возможность включения требования разрешения на его запуск только с определенного узла или URL-адреса, чтобы удостовериться, что он сможет вызываться только с веб-страниц, для запуска с которых он был предназначен.

Развертывание

Элементы управления с высоким уровнем доверия должны обязательно быть строго именованными или подписанными сертификатом издателя (X.509). Это позволяет администраторам политики безопасности предоставлять более высокое доверие этим элементам управления, не снижая уровня безопасности с учетом остального интранет- или интернет-кода. После подписания сборки пользователь обязан создать новую группу кода, ассоциированную с достаточными разрешениями, и указать, что только код, подписанный компанией или организацией пользователя, может получать право членства в этой группе кода. После того, как политика безопасности будет таким образом изменена, элемент управления с высоким уровнем доверия получит достаточные разрешения для выполнения.

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

См. также

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

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

Написание безопасных библиотек классов

Политика безопасности по умолчанию

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

Создание и использование сборок со строгими именами

Управление политикой безопасности