Cortes de segurança em mapas de site no ASP.NET

Um requisito de segurança comum a sites da Web é permitir que somente alguns membros ou usuários autenticados vejam certas páginas.O gerenciamento de funções do ASP.NET fornece uma maneira de restringir o acesso a arquivos da Web com base nas funções de segurança.O aparamento de segurança em mapas de site (site-map security trimming) fornece uma maneira de ocultar links de navegação em um mapa do site, também baseado em funções de segurança.Para obter informações sobre segurança de base de função, consulte Noções básicas sobre gerenciamento de papéis.

Como o aparamento de segurança no mapa de site funciona

Considere a seguinte estrutura de navegação, que é exibida em uma página ASP.NET.

Home
   Products
      Hardware
      Software
      Discounts
   Services
      Training
      Consulting
      Support

Clientes que não são membros de uma função (role) chamada Customers são impedidos de visualizar a página da Web de suporte devido a uma regra de acesso do ASP.NET que está configurada para a página Support.aspx.

Para ocultar o link Support na parte de navegação, configure o provedor de mapa de site no arquivo Web.config para ativar o aparamento de segurança.Nenhuma alteração adicional é necessária pois o aplicativo usará a autorização de URL ASP.NET e a autorização de arquivo para ocultar o link para a página de suporte .O controle XmlSiteMapProvider que está incluso no ASP.NET 2.0 automaticamente executa as verificações de autorização em cada nó do mapa de site, usando os recursos de autorização de URL e de arquivo.

Se você quiser mostrar o link de Suporte aos clientes que não fazem parte da função Clientes, você pode usar o atributo roles no nó de mapa de sites para o arquivo Support.aspx.O atributo roles expande o acesso para um nó de mapa de sites além do nível de acesso que a autorização da URL e a autorização do arquivo concedem.

O exemplo de código a seguir define o atributo roles para a página de suporte como Customers.Após ativar o aparamento de segurança, essa configuração permite aos usuários na função Customers verem o link de navegação para a página de suporte, mesmo que eles não tenham permissão para exibir o arquivo real pela autorização de URL ou autorização de arquivo.

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

Os usuários que não são membros da função Customers veriam a seguinte estrutura de navegação se eles fossem impedidos de visualizar a página Support devido a regras de autorização de URL ou de arquivo.

Home
   Products
      Hardware
      Software
      Discounts
   Services
      Training
      Consulting

Ativando aparamento de segurança

Aparação de segurança funciona em conjunto com as funções do ASP.NET.Portanto, as páginas devem ser restritas usando regras de acesso (allow e deny Elementos) para a remoção de segurança para trabalhar.Para obter mais informações sobre regras de acesso, consulte Gerenciando Autorização Usando Funções.

Aparação de segurança não é ativado por padrão e ela não pode ser habilitada por meio de programação; ela só pode ser definida no arquivo Web.config.Isso também é verdadeiro para qualquer classe que herda da classe SiteMapProvider Personalizada.

Para habilitar a remoção de segurança, você precisará configurar um elemento siteMap elemento (esquema configurações ASP.NET) no arquivo Web.config.Se seu mapa do site usa o provedor de mapa de sites do ASP.NET padrão, então, o arquivo Web.config não pode conter um elemento siteMap elemento (esquema configurações ASP.NET), neste caso, será necessário adicionar um.O exemplo de código a seguir adiciona o provedor de mapa de sites padrão e permite a remoção de segurança.

<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>

Considerações sobre desempenho

O recurso de aparamento de segurança usa a autorização de URL em cada solicitação para determinar se um usuário tem acesso a uma URL que está associada a um elemento siteMapNode.Esse trabalho extra reduz o desempenho dependendo do número de nós que estão sendo autorizados.Quando o aparamento de segurança estiver ativado, você pode usar os seguintes métodos para melhorar o desempenho:

  • Limite do número de nós no arquivo do mapa de site - Arquivos de mapa de site com mais de 150 nós podem levar consideravelmente mais tempo para executar as operações de aparamento de segurança.

  • Definir o roles Atributo explicitamente em siteMapNode elementos   Observe que configuração o roles atributo para um caractere curinga, ou asterisco (*), deve ser usado somente para nós que podem ser exibidos com segurança para qualquer cliente. A presença de um atributo roles permite ao ASP.NET ignorar a autorização de URL para a URL associada ao siteMapNode quando um usuário pertencer a uma das funções que são listadas no atributo.

Selecionando funções para impedir aparamento não intencional

Para evitar aparamentos indesejados de nós filhos de um mapa de site, configure regras de autorização e atributos de funções cuidadosamente.Considere a seguinte estrutura de navegação, que é exibida em uma página ASP.NET.

Home
   Products
      Hardware

Regras de autorização de arquivos definidas no arquivo Products.aspx não devem ser mais restritivas do que as regras de autorização que são definidas no arquivo Hardware.aspx.Caso contrário, o link Hardware ficará oculto a usuários que devem ser capazes de exibi-lo, porque o link pai para produtos ficará oculto.Para expor os links ocultos, adicione a ambos os nós de mapa de sites um atributo roles que lista as funções ASP.NET inativas.

É recomendável que seja permitido acesso a todos ao nó raiz em um mapa de site.Para fazer isso, defina o atributo roles como um asterisco (*), ou caractere curinga, conforme mostrado no exemplo de código a seguir.

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

Em um mapa de site, você pode consultar URLs que estão fora do seu aplicativo da Web.Acesso a um URL fora do aplicativo não pode ser testado pelo ASP.NET.Portanto, se você ativar o filtragem de segurança, o nó do MAP de site só serão visível a menos que você defina o atributo roles como um asterisco, que permite que todos os clientes Exibir o nó do MAP de site sem primeiro teste de acesso à URL.

Usando o aparamento de segurança em mapas múltiplos de site ou provedores

Você pode utilizar mapas múltiplos de site para definir a estrutura de navegação para um único site.Por exemplo, um arquivo Web.sitemap é semelhante a um arquivo Web.config porque ele pode ser dividido e colocado em pastas diferentes.

Mapas de sites são vinculados uns aos outros consultando um arquivo de mapa de site filho ou provedor no atributo siteMapFile ou provider de um objeto SiteMapNode no mapa do site pai.

O exemplo de código a seguir ilustra um nó de mapa de site que referencia outro mapa de site.

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

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

Membros do API afetados por aparamento de segurança

Você pode usar controles de navegação para adicionar navegação de site às suas páginas com pouco ou nenhum código, mas você também pode trabalhar com navegação de site programando.Quando o seu aplicativo Web é executado, o ASP.NET expõe um objeto SiteMap que reflete a estrutura do mapa do site.Todos os membros do objeto SiteMap são estáticos.O objeto SiteMap, por sua vez, expõe uma coleção de objetos SiteMapNode que contêm propriedades para cada nó no mapa.(Quando você usa o controle SiteMapPath, o controle funciona com os objetos SiteMap e SiteMapNode para processar os links apropriados automaticamente.)

Você pode usar os objetos SiteMap, SiteMapNode e SiteMapProvider no seu próprio código para atravessar a estrutura do mapa de sites ou criar um controle personalizado para exibir dados do mapa de sites.Você não pode gravar no mapa do site, mas você pode alterar nós do mapa de site na instância do objeto.Para obter mais informações, consulte Como: Modificar programaticamente Site Map Nodes in memória ou Como: Programaticamente enumerar nós de mapas do site.

O ASP.NET usa o provedor de mapa de sites padrão, XmlSiteMapProvider, para ler o arquivo Web.sitemap.Se você desejar armazenar informações de mapa de sites em um local diferente que o arquivo de mapa de sites, você pode criar seu próprio provedor de mapa de sites e configurar o seu aplicativo para chamar o provedor personalizado.O provedor de mapa de site está configurado no arquivo Web.config.Quando o aplicativo é executado, o ASP.NET irá chamar seu provedor, que pode recuperar informações de mapa de site conforme necessário.O ASP.NET cria e preenche os objetos SiteMapNode com base nas informações que o provedor retorna.Esses objetos podem ser acessados por meio de programação, usando a classe SiteMap.Para obter mais informações, consulte Implementando provedores site-Map em ASP.NET.

Observação de segurança:

A implementação de um provedor de mapa do site personalizado que armazene dados de mapa do site em um arquivo com uma extensão de nome de arquivo diferente de .sitemap é um risco de segurança em potencial.Por padrão, o ASP.NET é configurado para proteger arquivos com extensões de nome de arquivo conhecidas— como .sitemap — de serem descarregados por um cliente.Para ajudar a proteger seus dados, coloque quaisquer arquivos de dados de mapa do site personalizados que tenham uma extensão de nome de arquivo diferente de .sitemap na pasta App_Data.Para obter mais informações, consulte Tornando navegação em sites do ASP.NET seguro.

Quando ativada, a remoção de segurança afeta o comportamento de alguns dos membros nas classes SiteMap, SiteMapNode e SiteMapNodeCollection.Ao usar essas classes, você verá o seguinte comportamento:

  • Um null é retornado por um membro API de navegação de site se ele tenta fazer referência a um nó do mapa de site ao qual o usuário não tem direitos de segurança para ver.Por exemplo, as propriedades CurrentNode, NextSibling, ParentNode e PreviousSibling irão retornar um null se as propriedades tentarem retornar um nó de mapa de sites que seja restrito.

  • Se um membro API de navegação de site necessita percorrer a árvore de nós do mapa de site, qualquer nó do mapa de site que o usuário não tenha permissão de ver é excluído do percurso.Por exemplo, quando o método ChildNodes for executado, a coleção de nós é filtrada para incluir somente os nós que o usuário é autorizado a ver.No caso de membros da API que precisam manter controle dos caminhos de nó, como os métodos Clone ou IsDescendantOf, os caminhos terminam em nós restritos.Isso pode resultar em operações de clonagem retornando um número reduzido de nós.Ele também pode resultar no método IsDescendantOf retornando um valor false, embora estruturalmente um nó, na verdade, possa ser um descendente do nó solicitado.

  • Uma exceção InvalidOperationException é retornada se um membro API de navegação de site referenciar um nó raiz que o usuário não tenha os direitos de segurança para ver.Somente o nó raiz do provedor raiz precisará ser acessível a todos os usuários, o que impede uma exceção de ser lançada ao se obter de ínicio o objeto SiteMap.

  • Uma exceção ConfigurationException é acionada se um objeto SiteMapNode referencia outro arquivo de mapa de site ou provedor incorretamente.

Observação:

Em um mapa de site, você pode consultar URLs que estão fora do seu aplicativo da Web.Acesso a um URL fora do aplicativo não pode ser testado pelo ASP.NET.Portanto, se você ativar o filtragem de segurança, o nó do MAP de site só serão visível a menos que você defina o atributo roles como um asterisco, que permite que todos os clientes Exibir o nó do MAP de site sem primeiro teste de acesso à URL.

Consulte também

Tarefas

Demonstra Passo a passo: Filtragem de nós de mapas do site baseados em papéis de segurança

Conceitos

Tornando navegação em sites do ASP.NET seguro

Proteção de acesso a dados

Outros recursos

Gerenciando Autorização Usando Funções

Segurança de aplicativos ASP.NET em ambientes hospedados