Segurança (WPF)

Ao desenvolver aplicativos autônomos e hospedados no navegador do Windows Presentation Foundation (WPF), você deve considerar o modelo de segurança. Os aplicativos autônomos do WPF são executados com permissões irrestritas (conjunto de permissões CASFullTrust ), sejam implantados usando o Windows Installer (.msi), XCopy ou ClickOnce. Não há suporte para a implantação de aplicativos WPF autônomos e de confiança parcial com o ClickOnce. No entanto, um aplicativo host de confiança total pode criar uma confiança AppDomain parcial usando o modelo de suplemento do .NET Framework. Para obter mais informações, consulte Visão geral de Suplementos do WPF.

Os aplicativos hospedados no navegador WPF são hospedados pelo Windows Internet Explorer ou Firefox e podem ser aplicativos de navegador XAML (XBAPs) ou documentos XAML (Extensible Application Markup Language) soltos Para obter mais informações, consulte Visão geral de aplicativos de navegador XAML do WPF.

Aviso

XBAPs exigem navegadores herdados para operar, como Internet Explorer e Firefox. Essas versões mais antigas do navegador geralmente não são suportadas no Windows 10 e no Windows 11. Os navegadores modernos não suportam mais a tecnologia necessária para aplicativos XBAP devido a riscos de segurança. Plugins que habilitam XBAPs não são mais suportados.

Os aplicativos hospedados no navegador WPF são executados dentro de uma área restrita de segurança de confiança parcial, por padrão, que é limitada ao conjunto de permissões padrão da zona da Internet do CAS. Isso isola efetivamente os aplicativos hospedados no navegador WPF do computador cliente da mesma maneira que você esperaria que os aplicativos Web típicos fossem isolados. Um XBAP é capaz de elevar privilégios, até confiança total, dependendo da zona de segurança da URL de implantação e da configuração de segurança do cliente. Para obter mais informações, consulte Segurança parcialmente confiável do WPF.

Este tópico discute o modelo de segurança para aplicativos autônomos e hospedados no navegador do Windows Presentation Foundation (WPF).

Este tópico contém as seguintes seções:

Navegação segura

Para XBAPs, o WPF distingue dois tipos de navegação: aplicativo e navegador.

A navegação do aplicativo é uma navegação entre itens de conteúdo dentro de um aplicativo hospedado por um navegador. A navegação do navegador é uma navegação que muda a URL de local e conteúdo do próprio navegador. A relação entre a navegação do aplicativo (normalmente XAML) e a navegação do navegador (normalmente HTML) é mostrada nesta ilustração:

Relationship between application navigation and browser navigation.

O tipo de conteúdo considerado seguro para um XBAP é determinado principalmente pelo uso da navegação do aplicativo ou do navegador.

Segurança da navegação do aplicativo

A navegação do aplicativo é considerada segura se puder ser identificada com um URI de pacote, que oferece suporte a quatro tipos de conteúdo:

Tipo de conteúdo Descrição Exemplo de URI
Recurso Arquivos adicionados a um projeto com tipo de build de Recurso. pack://application:,,,/MyResourceFile.xaml
Sumário Arquivos adicionados a um projeto com tipo de build de Conteúdo. pack://application:,,,/MyContentFile.xaml
Site de origem Arquivos adicionados a um projeto com tipo de build de Nenhum. pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Código do aplicativo Recursos XAML que têm um code-behind compilado.

-ou-

Arquivos XAML adicionados a um projeto com tipo de build de Página.
pack://application:,,,/MyResourceFile .xaml

Observação

Para obter mais informações sobre arquivos de dados de aplicativo e URIs de pacote, consulte WPF Application Resource, Content and Data Files.

É possível navegar até arquivos desses tipos de conteúdo por meio do usuário ou programaticamente:

  • Navegação do usuário. O usuário navega clicando em um Hyperlink elemento.

  • Navegação programática. O aplicativo navega sem envolver o usuário, por exemplo, definindo a NavigationWindow.Source propriedade.

Segurança da navegação do navegador

A navegação do navegador é considerada segura somente nestas condições:

  • Navegação do usuário. O usuário navega clicando em um Hyperlink elemento que está dentro do principal NavigationWindow, não em um arquivo aninhado Frame.

  • Zona. O conteúdo da navegação localiza-se na Internet ou na intranet local.

  • Protocolo. O protocolo que está sendo usado é http, https, file ou mailto.

Se um XBAP tentar navegar para o conteúdo de uma maneira que não esteja em conformidade com essas condições, um SecurityException será lançado.

Configurações de segurança de software de navegação na Web

As configurações de segurança no seu computador determinam o acesso concedido a qualquer software de navegação Web. O software de navegação Web inclui qualquer aplicativo ou componente que usa as APIs WinINet ou UrlMon, incluindo Internet Explorer e PresentationHost.exe.

O Internet Explorer fornece um mecanismo pelo qual você pode configurar a funcionalidade que tem permissão para ser executada por ou a partir do Internet Explorer, incluindo o seguinte:

  • Componentes dependentes do .NET Framework

  • Controles ActiveX e plug-ins

  • Downloads

  • Scripting

  • Autenticação do usuário

A coleção de funcionalidades que podem ser protegidas dessa maneira é configurada por zona para as zonas de Internet, Intranet, Sites Confiáveis e Sites Restritos. As etapas a seguir descrevem como definir as configurações de segurança:

  1. Abra o Painel de Controle.

  2. Clique em Rede e Internet e, em seguida, em Opções da Internet.

    A caixa de diálogo Opções da Internet é exibida.

  3. Na guia Segurança, selecione a zona para a qual as configurações de segurança serão definidas.

  4. Clique no botão Nível personalizado.

    É exibida a caixa de diálogo Configurações de segurança, em que você pode definir as configurações de segurança para a zona selecionada.

    Screenshot that shows the Security Settings dialog box.

Observação

Também é possível acessar a caixa de diálogo Opções da Internet pelo Internet Explorer. Clique em Ferramentas e, em seguida, em Opções da Internet.

A partir do Windows Internet Explorer 7, as seguintes configurações de segurança especificamente para o .NET Framework estão incluídas:

  • XAML flexível. Controla se o Internet Explorer pode navegar e soltar arquivos XAML. (Opções de Habilitar, Desabilitar e Prompt.)

  • Aplicativos do navegador XAML. Controla se o Internet Explorer pode navegar e executar XBAPs. (Opções de Habilitar, Desabilitar e Prompt.)

Por padrão, essas configurações são habilitadas para as zonas de Internet, intranet local e sites confiáveis e desabilitadas para a zona de sites restritos.

Além das configurações de segurança disponíveis por meio das Opções da Internet, os valores de Registro a seguir estão disponíveis para bloquear seletivamente alguns recursos do WPF sensíveis à segurança. Os valores são definidos na seguinte chave:

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

A tabela a seguir lista os valores que podem ser definidos.

Nome do valor Tipo de valor Dados do valor
XBAPDisallow REG_DWORD 1 para não permitir; 0 para permitir.
LooseXamlDisallow REG_DWORD 1 para não permitir; 0 para permitir.
WebBrowserDisallow REG_DWORD 1 para não permitir; 0 para permitir.
MediaAudioDisallow REG_DWORD 1 para não permitir; 0 para permitir.
MediaImageDisallow REG_DWORD 1 para não permitir; 0 para permitir.
MediaVideoDisallow REG_DWORD 1 para não permitir; 0 para permitir.
ScriptInteropDisallow REG_DWORD 1 para não permitir; 0 para permitir.

Controle WebBrowser e controles de recurso

O controle WPF WebBrowser pode ser usado para hospedar conteúdo da Web. O controle WPF WebBrowser encapsula o controle ActiveX WebBrowser subjacente. O WPF fornece algum suporte para proteger seu aplicativo quando você usa o controle WPF WebBrowser para hospedar conteúdo da Web não confiável. No entanto, alguns recursos de segurança devem ser aplicados diretamente pelos aplicativos que usam o WebBrowser controle. Para obter mais informações sobre o controle ActiveX WebBrowser, consulte Visões gerais e tutoriais do controle WebBrowser.

Observação

Esta seção também se aplica ao controle, pois ele usa o WebBrowser para navegar até o Frame conteúdo HTML.

Se o controle WPF WebBrowser for usado para hospedar conteúdo da Web não confiável, seu aplicativo deverá usar uma confiança AppDomain parcial para ajudar a isolar o código do aplicativo do código de script HTML potencialmente mal-intencionado. Isso é especialmente verdadeiro se seu aplicativo estiver interagindo com o script hospedado usando o InvokeScript método e a ObjectForScripting propriedade. Para obter mais informações, consulte Visão geral de Suplementos do WPF.

Se seu aplicativo usa o controle WPF WebBrowser , outra maneira de aumentar a segurança e mitigar ataques é habilitar controles de recurso do Internet Explorer. Os controles de recurso são adições ao Internet Explorer que permitem que administradores e desenvolvedores configurem recursos do Internet Explorer e aplicativos que hospedam o controle ActiveX WebBrowser, que o controle WPF WebBrowser encapsula. É possível configurar os controles de recurso usando a função CoInternetSetFeatureEnabled ou mudando valores no Registro. Para obter mais informações sobre os controles de recurso, consulte Introdução aos controles de recurso e Controles de recurso da Internet.

Se você estiver desenvolvendo um aplicativo WPF autônomo que usa o controle WPF WebBrowser , o WPF habilitará automaticamente os seguintes controles de recurso para seu aplicativo.

Controle de recurso
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

Como esses controles de recurso são habilitados incondicionalmente, um aplicativo de confiança total pode ser prejudicado por eles. Nesse caso, se não houver risco de segurança para o aplicativo específico e o conteúdo hospedado por ele, o controle de recurso correspondente poderá ser desabilitado.

Os controles de recurso são aplicados pelo processo que instancia o objeto ActiveX WebBrowser. Portanto, se estiver criando um aplicativo autônomo capaz de navegar até o conteúdo não confiável, considere seriamente a possibilidade de habilitar controles de recurso adicionais.

Observação

Essa recomendação baseia-se em recomendações gerais para segurança do host MSHTML e SHDOCVW. Para obter mais informações, consulte Perguntas mais frequentes sobre segurança do host MSHTML: parte I de II e Perguntas mais frequentes sobre segurança do host MSHTML: parte II de II.

Para o executável, considere a possibilidade de habilitar os controles de recurso a seguir ao definir o valor de Registro como 1.

Controle de recurso
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

Para o executável, considere a possibilidade de desabilitar o controle de recurso a seguir ao definir o valor de Registro como 0.

Controle de recurso
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

Se você executar um aplicativo de navegador XAML (XBAP) de confiança parcial que inclua um controle WPF WebBrowser no Windows Internet Explorer, o WPF hospedará o controle ActiveX WebBrowser no espaço de endereço do processo do Internet Explorer. Como o controle ActiveX WebBrowser é hospedado no processo do Internet Explorer, todos os controles de recurso para o Internet Explorer também são habilitados para o controle ActiveX WebBrowser.

Os XBAPs executados no Internet Explorer também têm um nível adicional de segurança em comparação com aplicativos autônomos normais. Essa segurança adicional ocorre porque o Internet Explorer e, portanto, o controle ActiveX WebBrowser, é executado no modo protegido por padrão no Windows Vista e no Windows 7. Para obter mais informações sobre o modo protegido, consulte Entendendo e trabalhando no modo protegido do Internet Explorer.

Observação

Se você tentar executar um XBAP que inclui um controle WPF WebBrowser no Firefox, enquanto estiver na zona da Internet, um SecurityException será lançado. Isso ocorre por causa da política de segurança do WPF.

Desabilitando os assemblies APTCA para aplicativos cliente parcialmente confiáveis

Quando assemblies gerenciados são instalados no GAC (cache de assembly global), eles se tornam totalmente confiáveis porque o usuário deve fornecer permissão explícita para instalá-los. Como são totalmente confiáveis, apenas aplicativos clientes gerenciados totalmente confiáveis podem usá-los. Para permitir que aplicativos parcialmente confiáveis os usem, eles devem ser marcados com o AllowPartiallyTrustedCallersAttribute (APTCA). Somente assemblies que foram testados em relação à segurança para execução com confiança parcial devem ser marcados com tal atributo.

No entanto, é possível que um assembly APTCA exiba uma falha de segurança após ser instalado no GAC. Após a descoberta de uma falha de segurança, os publicadores de assembly podem produzir uma atualização de segurança para corrigir o problema em instalações existentes, além de protege de instalações que poderão ocorrer após a descoberta do problema. Uma opção para a atualização é desinstalar o assembly, embora isso possa interromper outros aplicativos clientes totalmente confiáveis que o utilizam.

O WPF fornece um mecanismo pelo qual um assembly APTCA pode ser desabilitado para XBAPs parcialmente confiáveis sem desinstalar o assembly APTCA.

Para desabilitar um assembly APTCA, é necessário criar uma chave do Registro especial:

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

Um exemplo é mostrado a seguir:

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

Essa chave estabelece uma entrada para o assembly APTCA. Você também precisa criar um valor nessa chave que habilite ou desabilite o assembly. Abaixo estão os detalhes do valor:

  • Nome do valor: APTCA_FLAG.

  • Tipo de valor: REG_DWORD.

  • Dados do valor: 1 para desabilitar; 0 para habilitar.

Caso seja necessário desabilitar um assembly para aplicativos clientes parcialmente confiáveis, você pode gravar uma atualização que crie a chave do Registro e o valor.

Observação

Os assemblies principais do .NET Framework não são afetados por desabilitá-los dessa maneira porque são necessários para a execução de aplicativos gerenciados. O suporte para desabilitar assemblies APTCA é destinado principalmente a aplicativos de terceiros.

Comportamento da área restrita para arquivos XAML flexíveis

Arquivos XAML soltos são arquivos XAML somente de marcação que não dependem de nenhum code-behind, manipulador de eventos ou assembly específico do aplicativo. Quando arquivos XAML soltos são navegados diretamente do navegador, eles são carregados em uma área restrita de segurança com base no conjunto de permissões padrão da zona da Internet.

No entanto, o comportamento de segurança é diferente quando arquivos XAML soltos são navegados para um NavigationWindow ou Frame em um aplicativo autônomo.

Em ambos os casos, o arquivo XAML solto que é navegado para herda as permissões de seu aplicativo host. No entanto, esse comportamento pode ser indesejável de uma perspectiva de segurança, especialmente se um arquivo XAML solto foi produzido por uma entidade que não é confiável ou desconhecida. Esse tipo de conteúdo é conhecido como conteúdo externo e ambos Frame e NavigationWindow pode ser configurado para isolá-lo quando navegado. O isolamento é obtido definindo a propriedade SandboxExternalContent como true, conforme mostrado nos exemplos a seguir para 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>

Com essa configuração, o conteúdo externo será carregado em um processo separado do processo que está hospedando o aplicativo. Esse processo restringe-se ao conjunto de permissões da zona da Internet padrão, isolando-o eficazmente do aplicativo host e do computador cliente.

Observação

Embora a navegação para soltar arquivos XAML de um NavigationWindow ou Frame em um aplicativo autônomo seja implementada com base na infraestrutura de hospedagem do navegador WPF, envolvendo o processo PresentationHost, o nível de segurança é um pouco menor do que quando o conteúdo é carregado diretamente no Internet Explorer no Windows Vista e no Windows 7 (que ainda seria por meio do PresentationHost). Isso ocorre porque um aplicativo autônomo do WPF que usa um navegador da Web não oferece o recurso de segurança adicional de modo protegido do Internet Explorer.

Recursos para o desenvolvimento de aplicativos do WPF que promovem a segurança

A seguir estão alguns recursos adicionais para ajudar a desenvolver aplicativos WPF que promovem a segurança:

Área Recurso
Código gerenciado Padrões e práticas de orientação de segurança para aplicativos
CAS Segurança de acesso do código
ClickOnce Segurança e implantação do ClickOnce
WPF Segurança parcialmente confiável do WPF

Confira também