Condividi tramite


Rimozione della protezione della mappa del sito ASP.NET

Aggiornamento: novembre 2007

In base a un comune requisito per la protezione dei siti Web, è necessario che determinate pagine vengano visualizzate solo da alcuni membri o utenti autenticati. La gestione dei ruoli ASP.NET consente di limitare l'accesso ai file Web usufruendo dei ruoli di protezione. Questi ultimi vengono utilizzati anche dalla funzionalità di rimozione della protezione della mappa del sito per nascondere i collegamenti di spostamento. Per informazioni sulla protezione basata su ruoli, vedere Informazioni sulla gestione dei ruoli.

Funzionamento della rimozione della protezione della mappa del sito

Esaminare la seguente struttura di spostamento, visualizzata in una pagina ASP.NET.

Home
   Products
      Hardware
      Software
      Discounts
   Services
      Training
      Consulting
      Support

In questa struttura una regola di accesso ASP.NET configurata per la pagina Support.aspx impedisce ai client che non appartengono al ruolo denominato Customers di visualizzare la pagina Web Support.

Per nascondere il collegamento alla pagina Support nella visualizzazione della struttura di spostamento, configurare il provider della mappa del sito nel file Web.config in modo da attivare la rimozione della protezione. Non è necessario apportare alcuna modifica aggiuntiva perché l'applicazione utilizzerà l'autorizzazione file e l'autorizzazione URL ASP.NET per nascondere il collegamento alla pagina Support. Il controllo XmlSiteMapProvider incluso in ASP.NET versione 2.0 verificherà automaticamente le autorizzazioni per ogni nodo della mappa del sito utilizzando le funzionalità di autorizzazione file e di autorizzazione URL.

Se si desidera che il collegamento alla pagina Support possa essere visualizzato dai client non compresi nel ruolo Customers, è possibile utilizzare l'attributo roles nel nodo della mappa del sito per il file Support.aspx. L'attributo roles consente di estendere l'accesso a un nodo della mappa del sito oltre il livello garantito dalle autorizzazioni file e URL.

Nel seguente codice di esempio l'attributo roles per la pagina Support è impostato su Customers. Una volta attivata la funzionalità di rimozione della protezione, questa impostazione consente agli utenti inclusi nel ruolo Customers di visualizzare il collegamento di spostamento alla pagina Support, anche se l'autorizzazione file o l'autorizzazione URL impedisce la visualizzazione del file effettivo.

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

Gli utenti non membri del ruolo Customers che non possono visualizzare la pagina Support a causa della regola di autorizzazione file o di autorizzazione URL visualizzeranno la struttura di spostamento seguente.

Home
   Products
      Hardware
      Software
      Discounts
   Services
      Training
      Consulting

Attivazione della rimozione della protezione

La funzionalità di rimozione della protezione opera congiuntamente ai ruoli ASP.NET. Pertanto, affinché la rimozione della protezione funzioni, l'accesso alle pagine deve essere limitato tramite le regole di accesso (elementi allow e deny). Per ulteriori informazioni sulle regole di accesso, vedere Gestione delle autorizzazioni tramite ruoli.

La funzionalità di rimozione della protezione non è attivata per impostazione predefinita, né può essere attivata a livello di codice, ma solo impostata nel file Web.config. Questo è valido anche per ogni classe personalizzata che eredita dalla classe SiteMapProvider.

Per attivare la rimozione della protezione, è necessario configurare un elemento Elemento siteMap (schema delle impostazioni ASP.NET) nel file Web.config. Se la mappa del sito utilizza il provider predefinito di mappa del sito ASP.NET, è possibile che nel file Web.config non sia presente un elemento Elemento siteMap (schema delle impostazioni ASP.NET), che dovrà quindi essere aggiunto. Nel seguente codice di esempio viene aggiunto il provider di mappa del sito predefinito e attivata la rimozione della protezione.

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

Considerazioni sulle prestazioni

La funzionalità di rimozione della protezione utilizza l'autorizzazione URL a ogni richiesta per determinare se l'utente possa accedere a un URL associato con un elemento siteMapNode. Queste operazioni aggiuntive riducono le prestazioni a seconda del numero di nodi che vengono autorizzati. Quando la funzionalità di rimozione della protezione è attivata, è possibile migliorare le prestazioni nei seguenti modi:

  • Impostando un limite sul numero di nodi nel file di mappa del sito   Quando nei file di mappa del sito sono contenuti più di 150 nodi, è necessario più tempo per eseguire le operazioni di rimozione della protezione.

  • Impostando l'attributo roles sugli elementi siteMapNode in modo esplicito   Tenere presente che l'attributo roles deve essere impostato su un carattere jolly o asterisco (*) solo per i nodi che possono essere visualizzati in modo sicuro da tutti i client. La presenza di un attributo roles consente ad ASP.NET di ignorare l'autorizzazione URL per l'URL associato con siteMapNode, quando l'utente è membro di uno dei ruoli elencati nell'attributo.

Selezione dei ruoli per evitare una rimozione casuale

Per evitare di rimuovere non intenzionalmente i nodi della mappa del sito figlio, configurare le regole di autorizzazione e gli attributi dei ruoli con attenzione. Esaminare la seguente struttura di spostamento, visualizzata in una pagina ASP.NET.

Home
   Products
      Hardware

Le regole di autorizzazione file o URL impostate nel file Products.aspx devono essere meno restrittive delle regole di autorizzazione impostate nel file Hardware.aspx. In caso contrario, il collegamento principale alla pagina Products verrà nascosto e il collegamento alla pagina Hardware non potrà essere visualizzato dagli utenti che ne avrebbero diritto. Per esporre i collegamenti nascosti, aggiungere a entrambi i nodi della mappa del sito un attributo roles in cui sono elencati i ruoli ASP.NET tralasciati.

Si consiglia di configurare il nodo principale in una mappa di sito in modo che sia accessibile a chiunque. A questo scopo, impostare l'attributo roles su un asterisco (*) o carattere jolly, come mostrato nel codice di esempio seguente.

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

In una mappa del sito è possibile fare riferimento a URL esterni all'applicazione Web. L'accesso a un URL esterno all'applicazione non può essere verificato da ASP.NET. Se quindi si attiva la funzionalità di rimozione della protezione, il nodo della mappa del sito non risulterà visibile, a meno che non si imposti l'attributo dei ruoli su un asterisco (*), consentendo a tutti i client di visualizzare il nodo della mappa del sito senza che l'accesso all'URL venga precedentemente verificato.

Utilizzo della rimozione della protezione con più mappe del sito o provider

Per definire la struttura di spostamento relativa un singolo sito Web, è possibile utilizzare più mappe del sito congiuntamente. Ad esempio, un file Web.sitemap è analogo a un file Web.config perché può essere suddiviso e memorizzato in cartelle diverse.

Le mappe del sito vengono collegate reciprocamente facendo riferimento a un provider o un file di mappa del sito figlio nell'attributo siteMapFile o provider di un oggetto SiteMapNode presente nella mappa del sito padre.

Nel seguente codice di esempio viene illustrato un nodo della mappa del sito che fa riferimento a un'altra mappa del sito.

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

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

Membri API interessati dalla rimozione della protezione

Per aggiungere alle pagine i percorsi di spostamento nel sito con una quantità minima o nulla di codice, è possibile utilizzare i controlli di spostamento. L'operazione può tuttavia essere eseguita anche a livello di codice. Quando l'applicazione Web viene eseguita, ASP.NET espone un oggetto SiteMap che riflette la struttura della mappa del sito. Tutti i membri dell'oggetto SiteMap sono statici. L'oggetto SiteMap espone a sua volta un insieme di oggetti SiteMapNode in cui sono contenute le proprietà per ogni nodo nella mappa. Quando infatti si utilizza il controllo SiteMapPath, questo opera congiuntamente agli oggetti SiteMap e SiteMapNode per eseguire il rendering dei collegamenti appropriati automaticamente.

È possibile avvalersi degli oggetti SiteMap, SiteMapNode e SiteMapProvider nel codice per scorrere la struttura della mappa del sito o creare un controllo personalizzato per visualizzare i dati della mappa del sito. Non è consentito scrivere nella mappa del sito, ma è possibile modificarne i nodi nell'istanza dell'oggetto. Per ulteriori informazioni, vedere Procedura: modificare a livello di codice i nodi della mappa del sito in memoria o Procedura: enumerare i nodi della mappa del sito a livello di codice.

Per leggere il file Web.sitemap, ASP.NET utilizza il provider predefinito della mappa del sito, ovvero XmlSiteMapProvider. Se si desidera archiviare le informazioni sulla mappa del sito in una posizione diversa dal file di mappa, è possibile creare un provider personalizzato e configurare l'applicazione in modo che indirizzi le chiamate a questo. Il provider della mappa del sito è configurato nel file Web.config. Quando l'applicazione viene eseguita, ASP.NET chiamerà il provider personalizzato in modo da recuperare le informazioni sulla mappa del sito necessarie, quindi creerà e inserirà gli oggetti SiteMapNode in base alle informazioni restituite dal provider. È possibile accedere a questi oggetti a livello di codice utilizzando la classe SiteMap. Per ulteriori informazioni, vedere Implementazione dei provider di mappa del sito ASP.NET.

Nota sulla sicurezza:

L'implementazione di un provider personalizzato di mappa del sito che archivia i dati della mappa in un file con estensione diversa da sitemap rappresenta una potenziale fonte di rischio per la protezione. Per impostazione predefinita, ASP.NET è configurato per impedire che i client eseguano il download di file con estensioni note, ad esempio sitemap. Per proteggere i dati, memorizzare i file di dati personalizzati della mappa del sito con estensione diversa da sitemap nella cartella App_Data. Per ulteriori informazioni, vedere Protezione del sistema di spostamento all'interno dei siti ASP.NET.

Quando è attivata, la funzionalità di rimozione della protezione influisce sul comportamento di alcuni membri nelle classi SiteMap, SiteMapNode e SiteMapNodeCollection. All'utilizzo di queste classi, sarà possibile notare il seguente comportamento:

  • Se un membro API di spostamento all'interno dei siti tenta di fare riferimento a un nodo della mappa che l'utente non è autorizzato a visualizzare, restituisce un valore null. Quando ad esempio le proprietà CurrentNode, NextSibling, ParentNode e PreviousSibling tentano di restituire un nodo della mappa del sito ad accesso limitato, restituiscono un valore null.

  • Se un membro API di spostamento scorre la struttura dei nodi della mappa del sito, tutti i nodi della mappa del sito che l'utente non è autorizzato a visualizzare verranno esclusi. Quando ad esempio il metodo ChildNodes è in esecuzione, l'insieme dei nodi viene filtrato in modo da includere solo i nodi che l'utente può visualizzare. I percorsi dei nodi di cui alcuni membri API, ad esempio i metodi Clone o IsDescendantOf, devono tenere traccia includeranno i soli nodi visualizzabili. È quindi possibile che vengano duplicate operazioni che restituiscono un numero di nodi ridotto oppure che il metodo IsDescendantOf che restituisce un valore di false e che a livello di struttura è un nodo, derivi in realtà dal nodo richiesto.

  • Se un membro API di spostamento fa riferimento a un nodo principale per la visualizzazione del quale l'utente non dispone dei privilegi di protezione, restituisce un'eccezione InvalidOperationException. Solo il nodo principale del provider principale deve essere accessibile a tutti gli utenti, in modo da evitare la generazione di un'eccezione quando si tenta di ottenere l'oggetto SiteMap per la prima volta.

  • Viene generata un'eccezione ConfigurationException se un oggettoSiteMapNode fa riferimento al provider o a un altro file di mappa del sito in modo non corretto.

Nota:

In una mappa del sito è possibile fare riferimento a URL esterni all'applicazione Web. L'accesso a un URL esterno all'applicazione non può essere verificato da ASP.NET. Se quindi si attiva la funzionalità di rimozione della protezione, il nodo della mappa del sito non risulterà visibile, a meno che non si imposti l'attributo dei ruoli su un asterisco (*), consentendo a tutti i client di visualizzare il nodo della mappa del sito senza che l'accesso all'URL venga precedentemente verificato.

Vedere anche

Attività

Procedura dettagliata: operazioni di filtro sui nodi della mappa del sito in base ai ruoli di protezione

Concetti

Protezione del sistema di spostamento all'interno dei siti ASP.NET

Protezione dell'accesso ai dati

Altre risorse

Gestione delle autorizzazioni tramite ruoli

Protezione delle applicazioni ASP.NET in ambienti host