Sicurezza di Windows Presentation Foundation

Aggiornamento: novembre 2007

In questo argomento viene descritto il modello di sicurezza per le applicazioni Windows Presentation Foundation (WPF) autonome e ospitate da browser.

Le applicazioni WPF autonome vengono eseguite con autorizzazioni complete (set di autorizzazioni FullTrust di CAS), indipendentemente dal fatto che siano distribuite con Windows Installer (con estensione msi), XCopy DOS o ClickOnce.

L'hosting delle applicazioni WPF ospitate da browser è garantito da Windows Internet Explorer e possono essere applicazione browser XAML (XBAP) o un linguaggio Extensible Application Markup Language (XAML) separato (vedere Cenni preliminari sulle applicazioni browser XAML di Windows Presentation Foundation).

Per impostazione predefinita, le applicazioni WPF ospitate da browser vengono eseguite in una sandbox di sicurezza di attendibilità parziale, limitata al set di autorizzazioni Internet predefinito di CAS. In questo modo, le applicazioni WPF ospitate da browser vengono isolate in modo efficace dal computer client nello stesso modo delle applicazioni Web tipiche. La sicurezza di attendibilità parziale viene descritta dettagliatamente in Sicurezza con attendibilità parziale di Windows Presentation Foundation.

Nel presente argomento sono contenute le seguenti sezioni.

  • Esplorazione sicura
  • Impostazioni di sicurezza di Internet Explorer
  • Disattivazione degli assembly APTCA per le applicazioni client parzialmente attendibili
  • Sandboxing di un linguaggio XAML separato esterno
  • Suggerimenti per lo sviluppo di applicazioni WPF sicure
  • Argomenti correlati

Esplorazione sicura

Per quanto riguarda le XBAP, in WPF è possibile distinguere due tipi di ambiti di esplorazione: applicazione e browser.

Esplorazione tramite applicazione rappresenta l'esplorazione tra elementi di contenuto di un'applicazione ospitata da un browser, mentre esplorazione tramite browser rappresenta l'esplorazione che modifica il contenuto del browser stesso. Nella figura seguente viene descritta la relazione tra l'esplorazione relativa all'ambito dell'applicazione e quella relativa all'ambito del browser:

Diagramma di spostamento

Il tipo di contenuto considerato sicuro per l'esplorazione di un'applicazione XBAP viene principalmente determinato in base al verificarsi di un'esplorazione tramite applicazione o browser.

Sicurezza dell'esplorazione tramite applicazione

L'esplorazione relativa all'ambito dell'applicazione è considerata sicura se può essere identificata con un URI di tipo pack che supporta quattro tipi di contenuto:

  • File di risorse, vale a dire i file aggiunti a un progetto con un tipo di compilazione Risorsa che possono inoltre essere identificati con un URI analogo al seguente:

    pack://application:,,,/MyResourceFile.xaml

  • File di dati, vale a dire i file aggiunti a un progetto con un tipo di compilazione Contenuto che possono inoltre essere identificati con un URI analogo al seguente:

    pack://application:,,,/MyContentFile.xaml

  • File del sito di origine, vale a dire i file aggiunti a un progetto con un tipo di compilazione Nessuno che possono inoltre essere identificati con un URI analogo al seguente:

    pack://siteoforigin:,,,/MySiteOfOriginFile.xaml

  • File di codice dell'applicazione, vale a dire i file aggiunti a un progetto con un tipo di compilazione Pagina che possono inoltre essere identificati con un URI analogo al seguente:

    pack://application:,,,/MyResourceFile.xaml

Nota

Per ulteriori informazioni sui file di dati dell'applicazione e sugli URI di tipo pack, vedere File di dati e di risorse delle applicazioni Windows Presentation Foundation.

I file di questi tipi di contenuto possono essere visualizzati come risultato di un'esplorazione dell'utente o di un'esplorazione a livello di codice:

  • Esplorazione dell'utente. L'utente ha avviato l'esplorazione facendo clic su un elemento Hyperlink.

  • Esplorazione a livello di codice. L'applicazione ha avviato l'esplorazione senza il coinvolgimento dell'utente.

Sicurezza dell'esplorazione tramite browser

L'esplorazione tramite browser è considerata sicura solo nelle condizioni seguenti:

  • Esplorazione dell'utente. L'utente ha avviato l'esplorazione facendo clic su un elemento Hyperlink.

  • Area. Il contenuto in corso di esplorazione risiede su Internet o nella rete Intranet locale.

  • Protocollo. Il protocollo utilizzato è http:, https:, file: o mailto:.

Se un'applicazione XBAP tenta di esplorare il contenuto in un modo non compatibile con queste condizioni, viene generata un'eccezione SecurityException.

Impostazioni di sicurezza di Internet Explorer

In Internet Explorer viene fornito un meccanismo con cui è possibile configurare la funzionalità che può essere eseguita da o in Internet Explorer, tra cui:

  • Componenti basati su .NET Framework

  • Controlli e plug-in ActiveX

  • Download

  • Scripting

  • Autenticazione utente

La possibilità e la modalità di esecuzione di una funzionalità sono determinate da un'impostazione di sicurezza. L'impostazione di sicurezza può essere configurata in modo da attivare o disattivare completamente una funzionalità oppure per richiedere all'utente di decidere in occasione di tutti i tentativi di esecuzione di una funzionalità.

L'insieme delle funzionalità che può essere protetto in questo modo viene configurato secondo una base per area relativa alle aree Internet, Intranet, Siti attendibili e Siti non attendibili. Le impostazioni di sicurezza possono essere configurate eseguendo le operazioni seguenti:

  1. Aprire Internet Explorer.

  2. Scegliere Opzioni | Sicurezza dal menu Strumenti.

  3. Selezionare l'area per cui configurare le impostazioni di sicurezza.

  4. Fare clic sul pulsante Livello personalizzato.

Viene aperta la finestra di dialogo Impostazioni protezione per configurare le impostazioni di sicurezza per l'area selezionata.

Finestra di dialogo delle impostazioni di sicurezza

In Windows Internet Explorer 7 sono incluse le quattro seguenti impostazioni di sicurezza in modo specifico per .NET Framework:

  • XAML separato. Controlla se in Internet Explorer 7 è possibile eseguire un'esplorazione e separare i file XAML. (opzioni Attiva, Disattiva e Chiedi conferma).

  • Applicazioni browser XAML Controlla se in Internet Explorer 7 è possibile eseguire un'esplorazione ed eseguire le XBAP. (opzioni Attiva, Disattiva e Chiedi conferma).

  • Documenti XPS. Controlla se in Internet Explorer 7 è possibile eseguire un'esplorazione e caricare i documenti XML Paper Specification (XPS). (opzioni Attiva, Disattiva e Chiedi conferma).

  • Abilita installazione .NET Framework. Controlla se .NET Framework può essere installato tramite Internet Explorer 7. (solo opzioni Attiva e Disattiva).

  • Per impostazione predefinita, queste impostazioni vengono tutte attivate per le aree Internet, Intranet locale e Siti attendibili, mentre vengono disattivate per l'area Siti non attendibili.

Impostazioni di sicurezza per IE6 e versioni precedenti

Per le versioni di Internet Explorer diverse da Internet Explorer, le diverse impostazioni di sicurezza relative a .NET Framework possono essere configurate nel Registro di sistema, in corrispondenza della chiave seguente:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features

Nella tabella seguente sono elencati i valori che è possibile impostare.

Nome del valore

Tipo di valore

Dati del valore

XBAPDisallow

REG_DWORD

1 per non consentire; 0 per consentire.

LooseXamlDisallow

REG_DWORD

1 per non consentire; 0 per consentire.

WebBrowserDisallow

REG_DWORD

1 per non consentire; 0 per consentire.

XPSDocumentsDisallow

REG_DWORD

1 per non consentire; 0 per consentire.

MediaAudioDisallow

REG_DWORD

1 per non consentire; 0 per consentire.

MediaImageDisallow

REG_DWORD

1 per non consentire; 0 per consentire.

MediaVideoDisallow

REG_DWORD

1 per non consentire; 0 per consentire.

Nota

Di queste impostazioni, XBAPDisallow e WebBrowserDisallow funzionano in tutte le versioni di Internet Explorer.

Disattivazione degli assembly APTCA per le applicazioni client parzialmente attendibili

Quando gli assembly gestiti vengono installati nella Global Assembly Cache (GAC), diventano completamente attendibili poiché l'utente deve fornire un'autorizzazione esplicita per installarli. Dal momento che sono completamente attendibili, possono essere utilizzati solo dalle applicazioni client gestite completamente attendibili. Per consentirne l'utilizzo da parte di applicazioni parzialmente attendibili, devono essere contrassegnati con AllowPartiallyTrustedCallersAttribute (APTCA). Solo gli assembly per cui il test di sicurezza per l'esecuzione ha dato come esito un'attendibilità parziale possono essere contrassegnati con questo attributo.

Tuttavia, un assembly APTCA può presentare un difetto nel sistema di sicurezza dopo essere stato installato nella GAC. Una volta rilevato un difetto nel sistema di sicurezza, gli editori dell'assembly possono creare una patch per risolvere il problema sulle installazioni esistenti e per proteggersi da installazioni che possono verificarsi dopo il rilevamento del problema. Un'opzione della patch è la disinstallazione dell'assembly, tuttavia in questo modo possono essere interrotte altre applicazioni client completamente attendibili che utilizzano l'assembly.

In WPF viene fornito un meccanismo con cui è possibile disattivare un assembly APTCA per le applicazioni WPF parzialmente attendibili, incluse le XBAP, senza disinstallare l'assembly APTCA.

Per disattivare un assembly APTCA, è necessario creare una chiave speciale in corrispondenza della seguente chiave del Registro di sistema:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>

Di seguito viene fornita una chiave di esempio:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0

In questo modo viene stabilita una voce per l'assembly APTCA, tuttavia, in questa chiave, è necessario creare anche un valore che attiva/disattiva l'assembly. Di seguito sono riportati i dettagli del valore da creare:

  • Nome del valore: APTCA_FLAG.

  • Tipo di valore: REG_DWORD.

  • Dati del valore: 1 per disattivare; 0 per attivare.

Gli editori di un assembly che deve essere disattivato in questo modo per applicazioni client parzialmente attendibili, possono scrivere una patch per creare una chiave del Registro di sistema e voci del valore per l'assembly.

Nota

Gli assembly .NET Framework di base non vengono influenzati da questa disattivazione, poiché sono necessari per l'esecuzione delle applicazioni gestite. Il supporto per la disattivazione degli assembly APTCA è principalmente destinato ad assembly non di .NET Framework e di terze parti.

Sandboxing di un linguaggio XAML separato esterno

I file XAML separati sono file con estensione xaml e solo markup che non possono essere identificati da un URI di tipo pack (vedere URI di tipo pack in Windows Presentation Foundation). Di conseguenza, non si tratta di file di risorse, di dati o del sito di origine (vedere File di dati e di risorse delle applicazioni Windows Presentation Foundation).

Quando l'esplorazione dei file XAML separati viene eseguita direttamente da Internet Explorer, vengono resi sicuri mediante sandbox attraverso il set di autorizzazione dell'area Internet.

Tuttavia, il comportamento di sicurezza è diverso quando l'esplorazione dei file XAML separati viene eseguita da NavigationWindow o Frame in un'applicazione autonoma.

In entrambi i casi, il file XAML separato che viene esplorato eredita le autorizzazioni dell'applicazione host. Tuttavia, dal punto di vista della sicurezza non si tratta di un comportamento desiderabile, in modo particolare se è stato creato un file XAML separato mediante un'entità non affidabile o sconosciuta Questo tipo di contenuto è noto come contenuto esterno e sia l'oggetto Frame, sia l'oggetto NavigationWindow possono essere configurati in modo da isolarlo durante l'esplorazione. L'isolamento viene raggiunto impostando la proprietà SandboxExternalContent su true, come illustrato negli esempi seguenti per Frame e NavigationWindow:

<Frame 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</Frame>
<!-- Sandboxing external content using NavigationWindow-->
<NavigationWindow 
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</NavigationWindow>

Con questa impostazione, il contenuto esterno sarà caricato in un processo separato da quello in cui è ospitata l'applicazione. Questo processo è limitato al set di autorizzazioni predefinito dell'area Internet, in modo da isolarla efficacemente dall'applicazione host e dal computer client.

Suggerimenti per lo sviluppo di applicazioni WPF sicure

La compilazione di applicazioni sicure per WPF richiede l'applicazione dei suggerimenti per quanto riportato di seguito:

Vedere anche

Concetti

Sicurezza con attendibilità parziale di Windows Presentation Foundation

Strategia di sicurezza di Windows Presentation Foundation - Sicurezza della piattaforma

Strategia di sicurezza di Windows Presentation Foundation - Progettazione sicura

Cenni preliminari sulla distribuzione ClickOnce

Cenni preliminari su XAML

Altre risorse

Patterns and Practices Security Guidance for Applications

Protezione dall'accesso di codice