Поделиться через


Фильтрация карты веб-узла ASP.NET по ролям безопасности

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

Частое требование безопасности для веб-узлов — позволять просматривать некоторые страницы только некоторым участникам или другим прошедшим проверку пользователям. Управление ролями ASP.NET предоставляет способ ограничить доступ к веб-файлам в зависимости от ролей безопасности. Фильтрация карты веб-узла по ролям безопасности позволяет скрывать ссылки переходов в карте узла, на основе ролей безопасности. Сведения о безопасности на основе ролей см. в разделе Основные сведения об управлении ролями.

Работа фильтрации карты веб-узла по ролям безопасности

Рассмотрим следующую структуру переходов, отображенную на странице ASP.NET.

Home
   Products
      Hardware
      Software
      Discounts
   Services
      Training
      Consulting
      Support

Для клиентов, не являющихся участниками роли Customers, просмотр веб-страницы Support запрещен правилом доступа ASP.NET, настроенным для страницы Support.aspx.

Чтобы скрыть ссылку Support в отображении переходов, включите фильтрации по ролям безопасности, настроив поставщик карты узла в файле Web.config. Никакие дополнительные изменения не потребуются, так как приложение будет использовать авторизацию URL-адресов ASP.NET и авторизацию файлов, чтобы скрыть страницу Support. Элемент управления XmlSiteMapProvider, поставляемый с ASP.NET версии 2.0 автоматически выполняет проверки авторизации для каждого узла карты веб-узла, используя возможности URL-авторизации и авторизации файлов.

Если нужно показать ссылку Support клиентам, не являющимся участниками роли Customers, то можно использовать для файла Support.aspx атрибут roles в узле карты веб-узла. Атрибут roles расширяет доступ к узлу карты веб-узла за пределы уровня доступа, предоставляемого авторизацией URL-адресов и авторизацией файлов.

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

<?xml version="1.0" encoding="utf-8" ?>
  <siteMap>
    <!-- other <siteMapNode> elements -->
      <siteMapNode title="Support" description="Support"
        url="~/Customers/Support.aspx" roles="Customers" />
  </siteMap>

Пользователи, не являющиеся участниками роли Customers, если правила URL-авторизации или авторизации файлов запрещают им просмотр страницы Support, увидят следующую структуру переходов.

Home
   Products
      Hardware
      Software
      Discounts
   Services
      Training
      Consulting

Включение фильтрации по ролям безопасности

Фильтрация по ролям безопасности работает вместе с ролями ASP.NET. Следовательно, чтобы фильтрация по ролям безопасности работала, доступ к страницам должен быть ограничен с помощью правил доступа (элементы allow и deny). Дополнительные сведения о правилах доступа см. в разделе Управление авторизацией с помощью ролей.

По умолчанию фильтрация по ролям безопасности не включена. Ее нельзя включить программно, она может быть задана только в файле Web.config. Это также справедливо для любого настраиваемого класса, который является производным от класса SiteMapProvider.

Чтобы включить фильтрацию по ролям безопасности, разработчик должен настроить элемент Элемент siteMap (схема параметров ASP.NET) в своем файле Web.config. Если для карты веб-узла используется поставщик карты веб-узла ASP.NET по умолчанию, то элемент Элемент siteMap (схема параметров ASP.NET) в файле Web.config может отсутствовать, и в этом случае он должен быть создан разработчиком. В следующем примере кода добавляется поставщик карты веб-узла по умолчанию и включается фильтрация по ролям безопасности.

<system.web>
<!-- …other configuration settings -->
  <siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
    <providers>
      <add name="XmlSiteMapProvider"
        description="Default SiteMap provider."
        type="System.Web.XmlSiteMapProvider "
        siteMapFile="Web.sitemap"
        securityTrimmingEnabled="true" />
    </providers>
  </siteMap>
</system.web>

Особенности производительности

Функция фильтрации по ролям безопасности использует авторизацию URL-адреса при каждом запросе для определения наличия у пользователя доступа к URL-адресу, связанному с элементом siteMapNode. Эти дополнительные действия снижают производительность в зависимости от количества авторизуемых узлов. Когда включена фильтрация по ролям безопасности, можно использовать следующие методы повышения производительности:

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

  • Задать атрибут roles для элементов siteMapNode явно:   обратите внимание, что задание для атрибута roles подстановочного знака, или звездочки (*), следует использовать только для узлов, которые могут безопасно отображаться для любого клиента. Наличие атрибута roles позволяет ASP.NET обойти авторизацию URL-адреса, связанную с узлом siteMapNode, если пользователь принадлежит к одной из ролей, перечисленных в атрибуте.

Выбор ролей для предотвращения непреднамеренной фильтрации

Чтобы предотвратить непреднамеренную фильтрацию дочерних узлов карты веб-узла, следует аккуратно настроить правила авторизации и атрибуты ролей. Рассмотрим следующую структуру переходов, отображенную на странице ASP.NET.

Home
   Products
      Hardware

Правила URL-авторизации или авторизации файлов, установленные для файла Products.aspx, не должны быть более строгими, чем правила авторизации, установленные для файла Hardware.aspx. В противном случае ссылка Hardware будет скрыта от пользователей, у которых должна быть возможность видеть ее, так как родительская ссылка на страницу Products будет скрыта. Чтобы предоставить скрытые ссылки, добавьте в оба узла карты веб-узла атрибут roles, содержащий список отвергаемых ролей ASP.NET.

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

<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
  <siteMapNode title="Home" description="Home" 
    url="default.aspx" roles="*">
    <!-- other <siteMapNode> elements -->
  </siteMapNode>
</siteMap>

На карте веб-узла можно ссылаться на URL-адреса за пределами веб-приложения. Доступ к URL-адресу вне приложения нельзя проверить с помощью ASP.NET. Следовательно, при включении фильтрации на основе ролей узел карты веб-узла не будет виден, пока в качестве значения атрибута ролей не будет задана звездочка (*), что позволяет всем клиентам просматривать узел карты веб-узла без предварительной проверки доступа к URL-адресу.

Использование фильтрации на основе ролей с несколькими картами веб-узла или поставщиками

Можно использовать вместе несколько карт веб-узла, чтобы определить структуру переходов для одного веб-узла. Например, файл Web.sitemap похож на файл Web.config, так как он может быть разделен и помещен в разные папки.

Карты веб-узлов связаны друг с другом с помощью ссылки на файл дочерней карты веб-узла или поставщика в атрибуте siteMapFile или provider объекта SiteMapNode родительской карты веб-узла.

В следующем примере кода показывается узел карты веб-узла, ссылающийся на другую карту веб-узла map.

<?xml version="1.0" encoding="utf-8" ?>

<siteMap>
  <!-- other <siteMapNode> elements -->
    <siteMapNode siteMapFile="~/Customers/Customers.sitemap" 
      securityTrimmingEnabled="true" />
</siteMap>

Члены интерфейсов API, на которые влияет фильтрация по ролям безопасности

Можно использовать элементы управления переходов для добавления структуры переходов веб-узла на страницы с минимальными количеством кода, или совсем без него, но можно также работать с переходами веб-узла программными средствами. При запуске веб-приложения ASP.NET предоставляет объект SiteMap, отражающий структуру карты веб-узла. Все члены объекта SiteMap являются статическими. Объект SiteMap, в свою очередь, предоставляет коллекцию объектов SiteMapNode, содержащих свойства для каждого узла в карте. Это вызвано тем, что при использовании элемента управления SiteMapPath он работает с объектами SiteMap и SiteMapNode для автоматического отображения нужных ссылок.

Разработчик может использовать объекты SiteMap, SiteMapNode и SiteMapProvider в собственном коде для перемещения по структуре карты веб-узла или для создания пользовательского элемента управления для отображения данных карты веб-узла. Нельзя осуществлять запись в карту веб-узла, но можно изменить ее узлы в экземпляре объекта. Дополнительные сведения см. в разделе Практическое руководство. Программное изменение узлов карты веб-узла в памяти или Практическое руководство. Программное перечисление узлов карты веб-узла.

В ASP.NET для чтения файла Web.sitemap используется поставщик карты веб-узла по умолчанию: XmlSiteMapProvider. Если нужно сохранить сведения о структуре веб-узла в расположении, отличном от файла карты веб-узла, можно создать собственный поставщик карты веб-узла и настроить приложение на вызов пользовательского поставщика. Поставщик карты веб-узла настраивается в файле Web.config. При запуске приложения ASP.NET вызывает поставщик, который может при необходимости извлечь сведения о структуре веб-узла. Затем ASP.NET создает и заполняет объекты SiteMapNode на основе сведений, возвращаемых поставщиком. Доступ к этим объектам может быть получен программным способом с помощью класса SiteMap. Дополнительные сведения см. в разделе Реализация поставщиков карт веб-узлов ASP.NET.

ms178428.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Реализация пользовательского поставщика карты веб-узла, который хранит данные о структуре веб-узла в файле с расширением, отличным от расширения SITEMAP, является потенциальной угрозой безопасности. По умолчанию сервер ASP.NET настроен так, чтобы не допускать загрузку клиентом файлов с известными расширениями, такими как SITEMAP. Чтобы защитить данные, следует помещать все пользовательские файлы с данными о структуре веб-узла с расширением, отличным от SITEMAP, в папку App_Data. Дополнительные сведения см. в разделе Безопасность системы навигации веб-узла ASP.NET.

Если фильтрация по ролям безопасности включена, то она влияет на поведение некоторых членов в классах SiteMap, SiteMapNode и SiteMapNodeCollection. Использование этих классов задает следующее поведение:

  • При попытке сослаться на узел карты веб-узла, просмотр которого запрещен пользователю правами системы безопасности, член интерфейса API, обеспечивающий доступ к структуре переходов веб-узла, возвращает значение null. Например, свойства CurrentNode, NextSibling, ParentNode, и PreviousSibling возвратят значение null, если эти свойства попытаются возвратить запрещенный узел карты.

  • Если члену интерфейса API, обеспечивающему доступ к структуре переходов веб-узла, нужно пройти по всему дереву узлов карты веб-узла, то все узлы карты веб-узла, которые не разрешено видеть пользователю, исключаются из прохождения. Например, при выполнении метода ChildNodes, коллекция узлов фильтруется, чтобы включать только те узлы, которые разрешено видеть пользователю. В случае членов интерфейсов API, которым требуется отслеживать пути узлов, таких как методы Clone или IsDescendantOf, пути заканчиваются в запрещенных узлах. Это может привести к возвращению операциями клонирования меньшего числа узлов. Это также может привести к возвращению методом IsDescendantOf значения false, даже если структурно у запрошенного узла может быть потомок.

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

  • Если объект SiteMapNode неправильно ссылается на другой файл или поставщик карты веб-узла, вызывается исключение ConfigurationException.

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

На карте веб-узла можно ссылаться на URL-адреса за пределами веб-приложения. Доступ к URL-адресу вне приложения нельзя проверить с помощью ASP.NET. Следовательно, при включении фильтрации на основе ролей узел карты веб-узла не будет виден, пока в качестве значения атрибута ролей не будет задана звездочка (*), что позволяет всем клиентам просматривать узел карты веб-узла без предварительной проверки доступа к URL-адресу.

См. также

Задачи

Пошаговое руководство. Фильтрация узлов карты веб-узла на основе ролей безопасности

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

Безопасность системы навигации веб-узла ASP.NET

Безопасность доступа к данным

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

Управление авторизацией с помощью ролей

Безопасность приложений ASP.NET в средах выполнения