Condividi tramite


Sicurezza (WPF)

Durante lo sviluppo di applicazioni Windows Presentation Foundation (WPF) autonome e ospitate da browser, è necessario prendere in considerazione il modello di sicurezza. Indipendentemente dal fatto che vengano distribuite con Windows Installer (con estensione msi), XCOPY o ClickOnce, le applicazioni WPF autonome vengono eseguite con autorizzazioni complete, set di autorizzazioni CAS FullTrust. Non è supportata la distribuzione di applicazioni WPF autonome e parzialmente attendibili con ClickOnce. Tuttavia, un'applicazione host con attendibilità totale può creare un oggetto AppDomain parzialmente attendibile utilizzando il modello del componente aggiuntivo .NET Framework. Per ulteriori informazioni, vedere Cenni preliminari sui componenti aggiuntivi di WPF.

L'hosting delle applicazioni WPF ospitate da browser è garantito da Windows Internet Explorer o da Firefox. Le applicazioni possono essere di tipo XAML browser applications (XBAPs) o documenti Extensible Application Markup Language (XAML) separati. Per ulteriori informazioni, vedere Panoramica delle applicazioni browser XAML di WPF.

Per impostazione predefinita, le applicazioni WPF ospitate da browser vengono eseguite all'interno di un sandbox di sicurezza con attendibilità parziale, limitato al set predefinito di autorizzazioni CAS dell'area Internet. Grazie a questa impostazione, le applicazioni WPF ospitate da browser vengono isolate in modo efficace dal computer client così come avviene per le applicazioni Web tipiche. Un'applicazione XBAP può elevare il livello di privilegi fino ad Attendibilità totale a seconda dell'area di sicurezza dell'URL di distribuzione e della configurazione di sicurezza del client. Per ulteriori informazioni, vedere Sicurezza con attendibilità parziale in WPF.

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

Di seguito sono elencate le diverse sezioni di questo argomento:

  • Esplorazione sicura

  • Impostazioni di sicurezza del software per l'esplorazione Web

  • Controllo WebBrowser e controlli della funzionalità

  • Disabilitazione degli assembly APTCA per le applicazioni client parzialmente attendibili

  • Comportamento del sandbox relativo ai file XAML separati

  • Risorse per lo sviluppo di applicazioni WPF che garantiscano la sicurezza

Esplorazione sicura

Per quanto riguarda le applicazioni XBAPs, in WPF è possibile distinguere due tipi di navigazione: tramite applicazione e tramite browser.

La navigazione tramite applicazione consiste nel passaggio tra elementi di contenuto all'interno di un'applicazione ospitata da un browser. La navigazione tramite browser implica la modifica del contenuto e dell'URL del percorso del browser stesso. Nell'illustrazione seguente viene mostrata la relazione tra la navigazione tramite applicazione (in genere XAML) e la navigazione tramite browser (in genere HTML):

Diagramma di spostamento

Il tipo di contenuto considerato sicuro per la navigazione da parte di un'applicazione XBAP viene determinato principalmente in base all'utilizzo della navigazione tramite applicazione o tramite browser.

Sicurezza dell'esplorazione tramite applicazione

La navigazione tramite applicazione è considerata sicura se può essere identificata con un URI di tipo pack che supporta quattro tipi di contenuto:

Tipo di contenuto

Descrizione

Esempio di URI

Risorsa

File aggiunti a un progetto con un tipo di compilazione Risorsa.

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

Contenuto

File aggiunti a un progetto con un tipo di compilazione Contenuto.

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

Sito di origine

File aggiunti a un progetto con un tipo di compilazione Nessuno.

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

Codice dell'applicazione

Risorse XAML che dispongono di code-behind compilato.

In alternativa

File XAML aggiunti a un progetto con un tipo di compilazione Pagina.

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

NotaNota

Per ulteriori informazioni sui file di dati applicazione e sugli URIs di tipo pack, vedere File di dati e di risorse dell'applicazione WPF..

La navigazione dei file di questi tipi di contenuto è possibile sia da parte dell'utente che a livello di codice:

  • Esplorazione dell'utente. L'utente esegue la navigazione facendo clic su un elemento Hyperlink.

  • Esplorazione a livello di codice. Nell'applicazione la navigazione viene eseguita senza l'intervento dell'utente, ad esempio tramite l'impostazione della proprietà NavigationWindow.Source.

Sicurezza dell'esplorazione tramite browser

La navigazione tramite browser è considerata sicura solo nelle condizioni seguenti:

  • Esplorazione dell'utente. L'utente esegue la navigazione facendo clic su un elemento Hyperlink all'interno dell'oggetto NavigationWindow principale, non in un Frame annidato.

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

  • Protocollo. Viene utilizzato uno dei protocolli seguenti: http, https, file o mailto.

Se in un'applicazione XBAP viene tentata l'esecuzione della navigazione del contenuto in modo non compatibile rispetto a queste condizioni, viene generata un'eccezione SecurityException.

Impostazioni di sicurezza del software per l'esplorazione Web

Le impostazioni di sicurezza sul computer in uso determinano l'accesso garantito a qualsiasi software per l'esplorazione Web. Il software per l'esplorazione Web include qualsiasi applicazione o componente che utilizza API WinINet o UrlMon, inclusi Internet Explorer e PresentationHost.exe.

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

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 con restrizioni. Nei passaggi seguenti viene descritto come configurare le impostazioni di sicurezza:

  1. Aprire il Pannello di controllo.

  2. Fare clic su Rete e Internet e quindi su Opzioni Internet.

    Verrà visualizzata la finestra di dialogo Opzioni Internet.

  3. Nella scheda Sicurezza selezionare l'area per cui configurare le impostazioni di sicurezza.

  4. Fare clic sul pulsante Livello personalizzato.

    Verrà visualizzata la finestra di dialogo Impostazioni sicurezza è sarà possibile configurare le impostazioni di sicurezza per l'area selezionata.

    Finestra di dialogo delle impostazioni di sicurezza

NotaNota

È anche possibile passare alla finestra di dialogo Opzioni Internet tramite Internet Explorer.Scegliere Opzioni Internet dal menu Strumenti.

A partire da Windows Internet Explorer 7, sono incluse le seguenti impostazioni di sicurezza specifiche per .NET Framework:

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

  • Applicazioni browser XAML. Controlla se in Internet Explorer è possibile eseguire un'esplorazione ed eseguire le XBAPs. (opzioni Abilita, Disabilita e Chiedi conferma).

Per impostazione predefinita, queste impostazioni vengono tutte abilitate per le aree Internet, Intranet locale e Siti attendibili, mentre vengono disabilitate per l'area Siti con restrizioni.

Impostazioni del Registro di sistema WPF correlate alla sicurezza

Oltre alle impostazioni di sicurezza disponibili tramite Opzioni Internet, sono disponibili i seguenti valori del Registro di sistema per bloccare in modo selettivo alcune funzionalità WPF relative alla sicurezza. I valori sono definiti nella 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.

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.

ScriptInteropDisallow

REG_DWORD

1 per non consentire; 0 per consentire.

Controllo WebBrowser e controlli della funzionalità

Il controllo WPF WebBrowser può essere utilizzato per ospitare contenuto Web. Il controllo WPF WebBrowser esegue il wrapping del controllo ActiveX WebBrowser sottostante. WPF fornisce supporto per proteggere l'applicazione quando si utilizza il controllo WPF WebBrowser per ospitare contenuto Web non attendibile. Tuttavia, alcune funzionalità di sicurezza devono essere applicate direttamente dalle applicazioni tramite il controllo WebBrowser. Per ulteriori informazioni sul controllo ActiveX WebBrowser, vedere Cenni preliminari ed esercitazioni relativi al controllo WebBrowser (la pagina potrebbe essere in inglese).

NotaNota

Questa sezione si applica anche al controllo Frame in quanto utilizza WebBrowser per passare al contenuto HTML.

Se il controllo WPF WebBrowser è utilizzato per ospitare contenuto Web non attendibile, l'applicazione deve utilizzare un AppDomain parzialmente attendibile per consentire l'isolamento del codice dell'applicazione dal codice di script HTML potenzialmente dannoso. Questa procedura è consigliata soprattutto nel caso in cui l'applicazione interagisca con lo script ospitato tramite il metodo InvokeScript e la proprietà ObjectForScripting. Per ulteriori informazioni, vedere Cenni preliminari sui componenti aggiuntivi di WPF.

Se l'applicazione utilizza il controllo WPF WebBrowser, un'altra possibilità per aumentare la sicurezza e ridurre gli attacchi consiste nell'abilitare i controlli della funzionalità di Internet Explorer. I controlli della funzionalità sono aggiunte a Internet Explorer che consentono agli amministratori e agli sviluppatori di configurare funzionalità di Internet Explorer e applicazioni che ospitano il controllo ActiveX WebBrowser di cui il controllo WPF WebBrowser esegue il wrapping. È possibile configurare i controlli della funzionalità tramite la funzione CoInternetSetFeatureEnabled o tramite la modifica dei valori nel Registro di sistema. Per ulteriori informazioni sui controlli della funzionalità, vedere Introduzione ai controlli della funzionalità e Controlli della funzionalità Internet (le pagine potrebbero essere in inglese).

Se si sviluppa un'applicazione WPF autonoma che utilizza il controllo WPF WebBrowser, WPF abilita automaticamente i controlli della funzionalità seguenti per l'applicazione.

Controllo della funzionalità

FEATURE_MIME_HANDLING

FEATURE_MIME_SNIFFING

FEATURE_OBJECT_CACHING

FEATURE_SAFE_BINDTOOBJECT

FEATURE_WINDOW_RESTRICTIONS

FEATURE_ZONE_ELEVATION

FEATURE_RESTRICT_FILEDOWNLOAD

FEATURE_RESTRICT_ACTIVEXINSTALL

FEATURE_ADDON_MANAGEMENT

FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

FEATURE_SECURITYBAND

FEATURE_UNC_SAVEDFILECHECK

FEATURE_VALIDATE_NAVIGATE_URL

FEATURE_DISABLE_TELNET_PROTOCOL

FEATURE_WEBOC_POPUPMANAGEMENT

FEATURE_DISABLE_LEGACY_COMPRESSION

FEATURE_SSLUX

Poiché questi controlli della funzionalità vengono abilitati incondizionatamente, potrebbero danneggiare un'applicazione con attendibilità totale. In questo caso, se non sono presenti rischi per la sicurezza relativi all'applicazione specifica e al contenuto che ospita, è possibile disabilitare il controllo della funzionalità corrispondente.

I controlli della funzionalità sono applicati dal processo che crea un'istanza dell'oggetto ActiveX WebBrowser. Pertanto, se si crea un'applicazione autonoma in grado di passare a contenuto non attendibile, è assolutamente opportuno abilitare controlli della funzionalità aggiuntivi.

NotaNota

Questa indicazione è basata sui suggerimenti generali per la sicurezza host MSHTML e SHDOCVW.Per ulteriori informazioni, vedere Domande frequenti relative alla sicurezza host MSHTML: parte I di II e Domande frequenti relative alla sicurezza host MSHTML: parte II di II (le pagine potrebbero essere in inglese).

Per il file eseguibile, abilitare i controlli della funzionalità riportati di seguito impostando il valore del Registro di sistema su 1.

Controllo della funzionalità

FEATURE_ACTIVEX_REPURPOSEDETECTION

FEATURE_BLOCK_LMZ_IMG

FEATURE_BLOCK_LMZ_OBJECT

FEATURE_BLOCK_LMZ_SCRIPT

FEATURE_RESTRICT_RES_TO_LMZ

FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7

FEATURE_SHOW_APP_PROTOCOL_WARN_DIALOG

FEATURE_LOCALMACHINE_LOCKDOWN

FEATURE_FORCE_ADDR_AND_STATUS

FEATURE_RESTRICTED_ZONE_WHEN_FILE_NOT_FOUND

Per il file eseguibile, disabilitare il controllo della funzionalità riportato di seguito impostando il valore del Registro di sistema su 0.

Controllo della funzionalità

FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

Se si esegue un'applicazione XAML browser application (XBAP) parzialmente attendibile che include un controllo WPF WebBrowser in Windows Internet Explorer, WPF ospita il controllo ActiveX WebBrowser nello spazio degli indirizzi del processo di Internet Explorer. Poiché il controllo ActiveX WebBrowser è ospitato nel processo di Internet Explorer, anche tutti i controlli della funzionalità per Internet Explorer vengono abilitati per il controllo ActiveX WebBrowser.

Le applicazioni XBAP in esecuzione in Internet Explorer ottengono anche un livello di sicurezza aggiuntivo rispetto alle applicazioni autonome normali. Questo livello di sicurezza aggiuntivo è determinato dal fatto che Internet Explorer, e di conseguenza il controllo ActiveX WebBrowser, per impostazione predefinita viene eseguito in modalità protetta su Windows Vista e Windows 7. Per ulteriori informazioni sulla modalità protetta, vedere Informazioni e utilizzo della modalità protetta di Internet Explorer (la pagina potrebbe essere in inglese).

NotaNota

Se mentre ci si trova nell'area Internet si tenta di eseguire in Firefox un'applicazione XBAP che include un controllo WPF WebBrowser, verrà generata un'eccezione SecurityException.Tale eccezione è determinata dai criteri di sicurezza WPF.

Disabilitazione 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. Quando viene individuato un difetto nel sistema di sicurezza, gli editori dell'assembly possono creare un aggiornamento della sicurezza per risolvere il problema nelle installazioni esistenti e per proteggersi da installazioni eseguite dopo l'individuazione del problema. Un'opzione dell'aggiornamento è la disinstallazione dell'assembly, tuttavia in questo modo può essere compromessa la funzionalità di altre applicazioni client completamente attendibili che utilizzano l'assembly.

In WPF viene fornito un meccanismo che consente di disabilitare un assembly APTCA per applicazioni XBAPs parzialmente attendibili, senza necessità di disinstallare l'assembly APTCA.

Per disabilitare un assembly APTCA, è necessario creare una chiave speciale del Registro di sistema:

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

Di seguito viene riportato un esempio:

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

Questa chiave stabilisce una voce per l'assembly APTCA. È inoltre necessario creare un valore di questa chiave che abiliti o disabiliti l'assembly. Di seguito sono riportati i dettagli del valore:

  • Nome del valore: APTCA_FLAG.

  • Tipo di valore: REG_DWORD.

  • Dati del valore: 1 per disabilitare; 0 per abilitare.

Se è necessario disabilitare un assembly per applicazioni client parzialmente attendibili, è possibile scrivere un aggiornamento per creare la chiave del Registro di sistema e il valore.

NotaNota

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

Comportamento del sandbox relativo ai file XAML separati

I file XAML separati sono file XAML solo markup che non dipendono da alcun code-behind, gestore eventi o assembly specifico dell'applicazione. Quando si passa ai file XAML separati direttamente dal browser, i file vengono caricati in un sandbox di sicurezza basato sul set di autorizzazioni predefinito 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 questo modo l'area viene isolata efficacemente dall'applicazione host e dal computer client.

NotaNota

Anche se in un'applicazione autonoma il passaggio ai file XAML separati da NavigationWindow o da Frame viene implementato in base all'infrastruttura che ospita il browser WPF coinvolgendo il processo PresentationHost, il livello di sicurezza è leggermente inferiore rispetto al caso in cui il contenuto viene caricato direttamente in Internet Explorer su Windows Vista e su Windows 7, ovvero ancora tramite PresentationHost. Ciò si verifica in quanto un'applicazione WPF autonoma che utilizza un browser Web non fornisce la funzionalità di sicurezza di modalità protetta aggiuntiva di Internet Explorer.

Risorse per lo sviluppo di applicazioni WPF che garantiscano la sicurezza

Di seguito alcune risorse aggiuntive per facilitare lo sviluppo di applicazioni WPF che garantiscano la sicurezza:

Area

Risorsa

Codice gestito

Modelli e indicazioni sulla sicurezza per applicazioni

CAS

Sicurezza dall'accesso di codice

ClickOnce

Sicurezza e distribuzione di ClickOnce

WPF

Sicurezza con attendibilità parziale in WPF

Vedere anche

Concetti

Sicurezza con attendibilità parziale in WPF

Strategia di sicurezza di WPF - Sicurezza della piattaforma

Strategia di sicurezza WPF - Progettazione di sicurezza

Sicurezza dall'accesso di codice

Sicurezza e distribuzione di ClickOnce

Cenni preliminari su XAML (WPF)

Altre risorse

Modelli e indicazioni sulla sicurezza per applicazioni