Sicurezza (WPF)

Quando si sviluppano applicazioni autonome e ospitate in browser di Windows Presentation Foundation (WPF), è necessario prendere in considerazione il modello di sicurezza. Le applicazioni autonome WPF vengono eseguite con autorizzazioni senza restrizioni (set di autorizzazioni CASFullTrust ), indipendentemente dal fatto che siano distribuite tramite Windows Installer (.msi), XCopy o ClickOnce. Non è supportata la distribuzione di applicazioni WPF autonome e parzialmente attendibili con ClickOnce. Tuttavia, un'applicazione host con attendibilità totale può creare un trust AppDomain parziale usando il modello di componente aggiuntivo .NET Framework. Per altre informazioni, vedere Cenni preliminari sui componenti aggiuntivi di WPF.

Le applicazioni ospitate da browser WPF sono ospitate da Windows Internet Explorer o Firefox e possono essere applicazioni browser XAML (XBAP) o documenti XAML (Extensible Application Markup Language) separati. Per altre informazioni, vedere Cenni preliminari sulle applicazioni browser XAML WPF.

Avviso

Gli XBAP richiedono il funzionamento dei browser legacy, ad esempio Internet Explorer e Firefox. Queste versioni precedenti del browser sono in genere non supportate in Windows 10 e Windows 11. I browser moderni non supportano più la tecnologia necessaria per le app XBAP a causa di rischi per la sicurezza. I plug-in che abilitano XBAP non sono più supportati.

Le applicazioni ospitate dal browser WPF vengono eseguite all'interno di una sandbox di sicurezza parzialmente attendibile, per impostazione predefinita, che è limitata al set di autorizzazioni dell'area Internet CAS predefinita. Ciò isola in modo efficace le applicazioni ospitate dal browser WPF dal computer client nello stesso modo in cui si prevede che le applicazioni Web tipiche siano isolate. 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 altre informazioni, vedere Sicurezza con attendibilità parziale in WPF.

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

Questo argomento include le sezioni seguenti:

Navigazione sicura

Per gli XBAP, WPF distingue due tipi di navigazione: applicazione e 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. La figura seguente illustra la relazione tra la navigazione tramite applicazione (in genere XAML) e la navigazione tramite browser (in genere HTML):

Relationship between application navigation and browser navigation.

Il tipo di contenuto considerato sicuro per un XBAP a cui passare è determinato principalmente dal fatto che venga usato lo spostamento dell'applicazione o lo spostamento nel browser.

Sicurezza della navigazione tramite applicazione

Lo spostamento delle applicazioni è considerato sicuro se può essere identificato con un URI di tipo pack, che supporta quattro tipi di contenuto:

Tipo di contenuto Descrizione Esempio di URI
Conto risorse 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.

oppure

File XAML aggiunti a un progetto con un tipo di compilazione Pagina.
pack://application:,,,/MyResourceFile .xaml

Nota

Per altre informazioni sui file di dati dell'applicazione e sugli URI di pacchetto, vedere Risorse dell'applicazione WPF, contenuto e file di dati.

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

  • Navigazione dell'utente. L'utente si sposta facendo clic su un Hyperlink elemento.

  • Navigazione a livello di codice. L'applicazione si sposta senza coinvolgere l'utente, ad esempio impostando la NavigationWindow.Source proprietà .

Sicurezza della navigazione tramite browser

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

  • Navigazione dell'utente. L'utente si sposta facendo clic su un Hyperlink elemento che si trova all'interno dell'oggetto principale NavigationWindow, non in un oggetto annidato Frame.

  • Area. Il contenuto per la navigazione si trova nell'area Internet o Intranet locale.

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

Se un XBAP tenta di passare al contenuto in modo che non sia conforme a queste condizioni, viene generata un'eccezione SecurityException .

Impostazioni di sicurezza del software per l'esplorazione Web

Le impostazioni di sicurezza nel 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 usa API WinINet o UrlMon, inclusi Internet Explorer e PresentationHost.exe.

Internet Explorer offre un meccanismo in base al quale è possibile configurare le funzionalità che possono essere eseguite da o da Internet Explorer, tra cui:

  • Componenti di .NET Framework conformi

  • Controlli e plug-in ActiveX

  • Download

  • Esecuzione script

  • Autenticazione degli utenti

La raccolta delle funzionalità che può essere protetta in questo modo viene configurata in base alle singole aree Internet, Intranet, Siti attendibili e Siti con restrizioni. La procedura seguente descrive 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.

    Screenshot that shows the Security Settings dialog box.

Nota

È 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 impostazioni di sicurezza seguenti per .NET Framework:

  • XAML libero. Controlla se Internet Explorer può passare a file XAML separati e separati. (opzioni Abilita, Disabilita e Chiedi conferma).

  • Applicazioni browser XAML. Controlla se Internet Explorer può passare a ed eseguire XBAP. (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.

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

La tabella seguente elenca i valori che è possibile impostare.

Nome valore Tipo di valore Dati 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 usato per ospitare contenuto Web. Il controllo WPF WebBrowser esegue il wrapping del controllo ActiveX WebBrowser sottostante. WPF offre supporto per proteggere l'applicazione quando si usa il controllo WPF WebBrowser per ospitare contenuto Web non attendibile. Tuttavia, alcune funzionalità di sicurezza devono essere applicate direttamente dalle applicazioni che usano il WebBrowser controllo . Per altre informazioni sul controllo ActiveX WebBrowser, vedere WebBrowser Control Overviews and Tutorials (Cenni preliminari ed esercitazioni relativi al controllo WebBrowser).

Nota

Questa sezione si applica anche al Frame controllo perché usa per WebBrowser passare al contenuto HTML.

Se il controllo WPF WebBrowser viene usato per ospitare contenuto Web non attendibile, l'applicazione deve usare un trust AppDomain parziale per isolare il codice dell'applicazione da codice script HTML potenzialmente dannoso. Ciò vale soprattutto se l'applicazione interagisce con lo script ospitato usando il InvokeScript metodo e la ObjectForScripting proprietà . Per altre informazioni, vedere Cenni preliminari sui componenti aggiuntivi di WPF.

Se l'applicazione usa il controllo WPF WebBrowser , un altro modo per aumentare la sicurezza e attenuare gli attacchi consiste nell'abilitare i controlli delle funzionalità di Internet Explorer. I controlli delle funzionalità sono aggiunte a Internet Explorer che consentono agli amministratori e agli sviluppatori di configurare le funzionalità di Internet Explorer e delle applicazioni che ospitano il controllo ActiveX WebBrowser, di cui viene eseguito il wrapping del controllo WPF WebBrowser . È possibile configurare i controlli della funzionalità tramite la funzione CoInternetSetFeatureEnabled o tramite la modifica dei valori nel Registro di sistema. Per altre informazioni sui controlli della funzionalità, vedere Introduction to Feature Controls (Introduzione ai controlli della funzionalità) e Internet Feature Controls (Controlli della funzionalità Internet).

Se si sviluppa un'applicazione WPF autonoma che usa il controllo WPF WebBrowser , WPF abilita automaticamente i controlli delle 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à vengono 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.

Nota

Questa indicazione è basata sui suggerimenti generali per la sicurezza host MSHTML e SHDOCVW. Per ulteriori informazioni, vedere The MSHTML Host Security FAQ: Part I of II (Domande frequenti relative alla sicurezza host MSHTML: parte I di II) e The MSHTML Host Security FAQ: Part II of II (Domande frequenti relative alla sicurezza host MSHTML: parte II di II).

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 browser XAML parzialmente attendibile (XBAP) che include un controllo WPF WebBrowser in Windows Internet Explorer, WPF ospita il controllo ActiveX WebBrowser nello spazio indirizzi del processo di Internet Explorer. Poiché il controllo ActiveX WebBrowser è ospitato nel processo di Internet Explorer, tutti i controlli delle funzionalità per Internet Explorer sono abilitati anche 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. Questa sicurezza aggiuntiva è dovuta al fatto che Internet Explorer, e quindi il controllo ActiveX WebBrowser, viene eseguito in modalità protetta per impostazione predefinita in Windows Vista e Windows 7. Per altre informazioni sulla modalità protetta, vedere Understanding and Working in Protected Mode Internet Explorer (Informazioni e utilizzo della modalità protetta di Internet Explorer).

Nota

Se si tenta di eseguire un XBAP che include un controllo WPF WebBrowser in Firefox, mentre nell'area Internet 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 perché l'utente deve fornire autorizzazioni esplicite per installarli. Dal momento che sono completamente attendibili, possono essere usati solo dalle applicazioni client gestite completamente attendibili. Per consentire l'uso di applicazioni parzialmente attendibili, è necessario contrassegnarle con APTCA AllowPartiallyTrustedCallersAttribute . 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, è possibile che un assembly APTCA mostri un difetto 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 proteggere le installazioni eseguite dopo l'individuazione del problema. Un'opzione per l'aggiornamento è la disinstallazione dell'assembly, anche se in questo modo può essere compromessa la funzionalità di altre applicazioni client completamente attendibili che usano l'assembly.

WPF fornisce un meccanismo tramite il quale un assembly APTCA può essere disabilitato per gli XBAP parzialmente attendibili senza 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 definisce una voce per l'assembly APTCA. È anche necessario creare un valore di questa chiave che abiliti o disabiliti l'assembly. Di seguito sono riportati i dettagli del valore:

  • Nome valore: APTCA_FLAG.

  • Tipo valore: REG_DWORD.

  • Dati valore: 1 per disabilitare; 0 da 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.

Nota

Gli assembly .NET Framework core non sono interessati disabilitandoli in questo modo perché sono necessari per l'esecuzione delle applicazioni gestite. Il supporto per la disabilitazione degli assembly APTCA è destinato principalmente alle applicazioni di terze parti.

Comportamento della sandbox per i file XAML separati

I file XAML separati sono file XAML di sola markup che non dipendono da alcun code-behind, gestore eventi o assembly specifico dell'applicazione. Quando i file XAML separati vengono spostati direttamente dal browser, vengono caricati in una sandbox di sicurezza in base al set di autorizzazioni predefinito dell'area Internet.

Tuttavia, il comportamento di sicurezza è diverso quando i file XAML separati vengono spostati da o NavigationWindowFrame in un'applicazione autonoma.

In entrambi i casi, il file XAML libero che viene spostato per eredita le autorizzazioni dell'applicazione host. Tuttavia, questo comportamento può essere indesiderato dal punto di vista della sicurezza, in particolare se un file XAML libero è stato prodotto da un'entità non attendibile o sconosciuta. Questo tipo di contenuto è noto come contenuto esterno e FrameNavigationWindow può essere configurato per isolarlo quando si passa a . L'isolamento viene ottenuto 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="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</NavigationWindow>

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

Nota

Anche se lo spostamento verso file XAML separati da un'applicazione NavigationWindow autonoma o Frame in un'applicazione autonoma viene implementato in base all'infrastruttura di hosting del browser WPF, che coinvolge il processo PresentationHost, il livello di sicurezza è leggermente inferiore a quando il contenuto viene caricato direttamente in Internet Explorer in Windows Vista e Windows 7 (che sarebbe ancora tramite PresentationHost). Ciò si verifica in quanto un'applicazione WPF autonoma che usa un Web browser 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 sono riportate alcune risorse aggiuntive che consentono di sviluppare applicazioni WPF che promuovono la sicurezza:

Area Conto risorse
Codice gestito Patterns and Practices Security Guidance for Applications (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

Vedi anche