Compartilhar via


Segurança (WPF)

Ao desenvolver aplicativos autônomos do WPF (Windows Presentation Foundation) e hospedados pelo navegador, 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 ), seja implantados usando o Windows Installer (.msi), XCopy ou ClickOnce. A implantação de aplicativos WPF autônomos e de confiança parcial com o ClickOnce não tem suporte. No entanto, um aplicativo host de confiança total pode criar um de confiança parcial AppDomain usando o modelo de Add-in do .NET Framework. Para obter mais informações, consulte Visão geral do WPF Add-Ins.

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

Aviso

Os XBAPs exigem que navegadores herdados operem, como o Internet Explorer e versões antigas do Firefox. Esses navegadores mais antigos geralmente não têm suporte no Windows 10 e no Windows 11. Os navegadores modernos não dão mais suporte à tecnologia necessária para aplicativos XBAP devido a riscos de segurança. Plug-ins que habilitam XBAPs não têm mais suporte. Para obter mais informações, consulte Perguntas frequentes sobre oXBAP (aplicativos hospedados por navegador) do WPF.

Os aplicativos do WPF hospedados pelo navegador são executados em uma caixa de proteção de segurança com confiança parcial, por padrão, que é limitada ao conjunto de permissões da zona de Internet padrão do CAS. Isso isola efetivamente os aplicativos hospedados pelo navegador WPF do computador cliente da mesma forma que você esperaria que os aplicativos Web típicos fossem isolados. Um XBAP pode elevar privilégios, até a 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 de confiança parcial do WPF.

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

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 é a navegação entre itens de conteúdo em um aplicativo hospedado por um navegador. A navegação do navegador é a navegação que altera o conteúdo e a URL de localização de um próprio navegador. A relação entre a navegação do aplicativo (normalmente XAML) e a navegação do navegador (normalmente HTML) é mostrada na ilustração a seguir:

Relação entre a navegação do aplicativo e a navegação do navegador.

O tipo de conteúdo considerado seguro para um XBAP navegar é determinado principalmente pela navegação do aplicativo ou navegação no navegador.

Segurança de Navegação do Aplicativo

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

Tipo de conteúdo Descrição Exemplo de URI
Recurso Arquivos que são adicionados a um projeto com um tipo de build de Recurso. pack://application:,,,/MyResourceFile.xaml
Conteúdo Arquivos que são adicionados a um projeto com o tipo de compilação de Conteúdo. pack://application:,,,/MyContentFile.xaml
Site de origem Arquivos que são adicionados a um projeto com um tipo de build none. pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Código do aplicativo Recursos XAML que têm um código subjacente compilado.

- ou -

Arquivos XAML que são adicionados a um projeto com um tipo de build de Page.
pack://application:,,,/MyResourceFile .xaml

Observação

Para obter mais informações sobre arquivos de dados do aplicativo e URIs de pacote, consulte O Recurso de Aplicativo do WPF, o Conteúdo e os Arquivos de Dados.

Os arquivos desses tipos de conteúdo podem ser navegados pelo 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 de navegação do navegador

A navegação do navegador é considerada segura apenas nas seguintes condições:

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

  • Zona. O conteúdo acessado está localizado na Internet ou na intranet local.

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

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

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

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

O Internet Explorer fornece um mecanismo pelo qual você pode configurar quais funcionalidades têm permissão para ser executadas por ou a partir do próprio navegador, incluindo as seguintes:

  • Componentes dependentes do .NET Framework

  • Controles e plug-ins do ActiveX

  • Arquivos para Download

  • Script

  • Autenticação do usuário

A coleção de funcionalidades que podem ser protegidas dessa forma é configurada por zona para as zonas internet, intranet, sites confiáveis e sites restritos . As etapas a seguir descrevem como definir suas configurações de segurança:

  1. Abra o Painel de Controle.

  2. Clique em Rede e Internet e , em seguida, clique 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 definir as configurações de segurança.

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

    A caixa de diálogo Configurações de Segurança é exibida e você pode definir as configurações de segurança para a zona selecionada.

    Captura de tela que mostra a caixa de diálogo Configurações de Segurança.

Observação

Você também pode acessar a caixa de diálogo Opções da Internet do Internet Explorer. Clique em Ferramentas e, em seguida, clique 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 solto. Controla se o Internet Explorer pode navegar até e baixar arquivos XAML. (Opções: Habilitar, Desabilitar e Solicitar).

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

Por padrão, essas configurações estão todas habilitadas para a Internet, intranet local e zonas de 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 seguintes valores de registro estão disponíveis para bloquear seletivamente vários 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.
DesativarNavegador REG_DWORD 1 para não permitir; 0 para permitir.
ProibiçãoDeÁudioDeMídia REG_DWORD 1 para não permitir; 0 para permitir.
DesativarImagemMídia REG_DWORD 1 para não permitir; 0 para permitir.
MídiaVídeoProibir 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 funcionalidades

O controle WPF WebBrowser pode ser usado para hospedar conteúdo da Web. O controle WPF WebBrowser encapsula o controle ActiveX do 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 do WebBrowser, consulte as visões gerais e tutoriais do controle WebBrowser.

Observação

Esta seção também se aplica ao Frame Controle, pois usa o WebBrowser para navegar até o 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 o 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 do WPF Add-Ins.

Se o aplicativo usar o controle WPF WebBrowser , outra maneira de aumentar a segurança e reduzir os ataques é habilitar os controles de recursos do Internet Explorer. Os controles de recursos 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 do WebBrowser, que o controle WPF WebBrowser encapsula. Os controles de recursos podem ser configurados usando a função CoInternetSetFeatureEnabled ou alterando valores no registro. Para obter mais informações sobre controles de recursos, consulte Introdução aos controles de recursos e controles de recursos da Internet.

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

Controle de funcionalidades
FEATURE_MIME_HANDLING
FEATURE_MIME_SNIFFING
Funcionalidade de Cache de Objetos
FEATURE_SAFE_BINDTOOBJECT
RESTRIÇÕES_DA_JANELA_DE_FUNCIONALIDADE
FEATURE_ZONE_ELEVATION
FEATURE_RESTRICT_FILEDOWNLOAD
FEATURE_RESTRICT_ACTIVEXINSTALL
GERENCIAMENTO_DE_RECURSOS_ADICIONAIS
FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
FEATURE_SECURITYBAND
FEATURE_UNC_SAVEDFILECHECK
CARACTERÍSTICA_VALIDAR_NAVEGAR_URL
FEATURE_DISABLE_TELNET_PROTOCOL
FEATURE_WEBOC_POPUPMANAGEMENT
FEATURE_DISABLE_LEGACY_COMPRESSION
FEATURE_SSLUX

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

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

Observação

Essa recomendação é baseada em recomendações gerais para segurança de host MSHTML e SHDOCVW. Para obter mais informações, consulte as perguntas frequentes sobre a segurança do host MSHTML: Parte I de II e as perguntas frequentes sobre a segurança do host MSHTML: Parte II de II.

Para seu executável, considere habilitar o controle de recursos a seguir, definindo o valor do Registro como 1.

Controle de funcionalidades
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
Zona restrita de recurso quando o arquivo não é encontrado

Para o seu executável, considere desabilitar o seguinte controle de funcionalidade definindo o valor no Registro como 0.

Controle de funcionalidades
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

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

Os XBAPs em execução no Internet Explorer também obtê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 do WebBrowser, são executados no modo protegido por padrão no Windows Vista e no Windows 7. Para obter mais informações sobre o modo protegido, consulte Noções básicas e funcionando no Modo Protegido do Internet Explorer.

Observação

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

Desabilitando assemblies APTCA para aplicativos cliente parcialmente confiáveis

Quando os 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 eles são totalmente confiáveis, somente aplicativos cliente gerenciados totalmente confiáveis podem usá-los. Para permitir que aplicativos parcialmente confiáveis os usem, eles devem ser marcados com a AllowPartiallyTrustedCallersAttribute (APTCA). Somente os assemblies que foram testados e considerados seguros para execução em um ambiente de confiança limitada devem ser marcados com esse atributo.

No entanto, é possível que um assembly APTCA apresente uma falha de segurança depois de ser instalado no GAC. Depois que uma falha de segurança é descoberta, os editores de assembly podem produzir uma atualização de segurança para corrigir o problema em instalações existentes e proteger contra instalações que podem ocorrer após a descoberta do problema. Uma opção para a atualização é desinstalar o assembly, embora isso possa interromper outros aplicativos cliente totalmente confiáveis que usam o assembly.

O WPF fornece um mecanismo pelo qual é possível desabilitar um assembly APTCA para XBAPs com confiança parcial, sem precisar desinstalar o assembly APTCA.

Para desabilitar um assembly APTCA, você precisa criar uma chave de registro especial:

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

O seguinte mostra um exemplo:

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 conjunto APTCA. Você também precisa criar um valor nessa chave que habilite ou desabilite o módulo. Veja a seguir os detalhes do valor:

  • Nome do valor: APTCA_FLAG.

  • Tipo de valor: REG_DWORD.

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

Se um assembly precisar ser desabilitado para aplicativos cliente parcialmente confiáveis, você poderá escrever uma atualização que crie a chave e o valor do Registro.

Observação

Os assemblies principais do .NET Framework não são afetados por desabilitá-los dessa forma porque são necessários para que os aplicativos gerenciados sejam executados. O suporte para desabilitar assemblies APTCA é direcionado principalmente para aplicativos de terceiros.

Comportamento de ambiente sandbox para arquivos XAML não agrupados

Arquivos XAML soltos são arquivos XAML apenas de marcação que não dependem de nenhum código de fundo, manipulador de eventos ou assembly específico do aplicativo. Quando arquivos XAML independentes são acessados diretamente pelo navegador, eles são carregados em uma área restrita de segurança com base no conjunto de permissões da zona padrão da Internet.

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

Em ambos os casos, o arquivo XAML solto que é navegado 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 podem ser configurados para isolá-lo quando acessado. O isolamento é alcançado definindo a propriedade SandboxExternalContent como true, conforme mostrado nos seguintes exemplos 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 hospeda o aplicativo. Esse processo é restrito ao conjunto de permissões de zona da Internet padrão, isolando-o efetivamente do aplicativo de hospedagem e do computador cliente.

Observação

Embora a navegação para arquivos XAML soltos 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 WPF autônomo usando um navegador da Web não fornece o recurso de segurança do Modo Protegido adicional do Internet Explorer.

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

Veja a seguir alguns recursos adicionais para ajudar a desenvolver aplicativos WPF que promovem a segurança:

Área Recurso
Código gerenciado Diretrizes de segurança de padrões e práticas para aplicativos
CAS Segurança de Acesso ao Código
ClickOnce Segurança e implantação do ClickOnce
WPF (Windows Presentation Foundation) Segurança parcialmente confiável do WPF

Consulte também