Partilhar via


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 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 do Add-Ins 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 WPF XAML.

Advertência

Os XBAPs requerem navegadores herdados para funcionar, como o Internet Explorer e versões antigas do Firefox. Esses navegadores mais antigos geralmente não são suportados 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. Plug-ins que habilitam XBAPs não são mais suportados. Para obter mais informações, consulte Perguntas freqüentes sobre aplicativos hospedados no navegador WPF (XBAP).

As aplicações WPF hospedadas no navegador são executadas numa sandbox de segurança de confiança parcial, por padrão, que é limitada ao conjunto de permissões da zona de Internet CAS padrão. Isso efetivamente isola os aplicativos hospedados no navegador WPF do computador cliente da mesma forma que você esperaria que os aplicativos Web típicos fossem isolados. Um XBAP pode elevar os 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 WPF Partial Trust Security.

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.

Navegação de aplicativo é a navegação entre itens de conteúdo dentro de um aplicativo que é hospedado por um navegador. A navegação no navegador é a navegação que altera o conteúdo e o URL de localização do 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 na aplicação e a navegação no browser.

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

Segurança de navegação de aplicativos

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

Tipo de conteúdo Descrição Exemplo de URI
Recurso Ficheiros 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 um tipo de compilação de conteúdo. pack://application:,,,/MyContentFile.xaml
Local de origem Arquivos que são adicionados a um projeto com um tipo de compilação de Nenhum. pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Código do aplicativo Recursos XAML que têm um código subjacente compilado.

-ou-

Ficheiros XAML que são adicionados a um projeto com um tipo de compilação de Page.
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.

Os arquivos desses tipos de conteúdo podem ser navegados pelo usuário ou programaticamente:

  • Navegação do Utilizador. 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 no navegador só é considerada segura nas seguintes condições:

  • Navegação do Utilizador. O utilizador navega clicando num Hyperlink elemento que está dentro do NavigationWindow principal, não num Frame aninhado.

  • Zona. O conteúdo a que se está a navegar está localizado 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 do 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 na Web. O software de navegação na Web inclui qualquer aplicação ou componente que utilize as APIs WinINet ou UrlMon , incluindo o Internet Explorer e PresentationHost.exe.

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

  • Componentes dependentes do .NET Framework

  • Controles *ActiveX* e extensões

  • Descargas

  • Criação de scripts

  • 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 Painel de Controlo.

  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 ecrã que mostra a caixa de diálogo Definições de Segurança.

Observação

Também pode aceder à caixa de diálogo Opções da Internet a partir 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 para e aceder a arquivos XAML desprotegidos. (Opções de Ativação, Desativação e Solicitação)

  • Aplicativos de navegador XAML. Controla se o Internet Explorer pode navegar e executar XBAPs. (Opções de Ativação, Desativação e Solicitação)

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

Além das configurações de segurança disponíveis através das Opções da Internet, os seguintes valores do Registro estão disponíveis para bloquear seletivamente vários recursos do WPF sensíveis à segurança. Os valores são definidos sob a 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.
WebBrowserNão permitir REG_DWORD 1 para não permitir; 0 para permitir.
ProibirÁudioMídia REG_DWORD 1 para não permitir; 0 para permitir.
ProibiçãoDeImagemDeMídia REG_DWORD 1 para não permitir; 0 para permitir.
MediaVideoNão permitir 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 WebBrowser subjacente. 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 Frame controle, pois ele usa o WebBrowser para navegar até o conteúdo HTML.

Se o controlo WPF WebBrowser for usado para hospedar conteúdo da Web não confiável, a sua aplicação deverá usar um nível de confiança AppDomain parcial para ajudar a isolar o código da aplicação do código de script HTML potencialmente malicioso. 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 do Add-Ins WPF.

Se seu aplicativo usa o controle WPF WebBrowser , outra maneira de aumentar a segurança e mitigar ataques é habilitar os controles de recursos 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. Os controles de recurso 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 WebBrowser , o WPF habilita automaticamente os seguintes controles de recurso para seu aplicativo.

Controlo de Funcionalidades
FEATURE_MIME_HANDLING
Funcionalidade_Detecção_MIME
FUNCIONALIDADE_ARMAZENAMENTO_DE_OBJETOS
FEATURE_SAFE_BINDTOOBJECT
Restrições da Janela de Funcionalidades
CARACTERÍSTICA_ZONA_ELEVAÇÃO
RESTRIÇÃO_DESCARGA_FICHEIROS
Restrição de Instalação de ActiveX
GESTÃO_DE_COMPLEMENTOS
FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
FUNCIONALIDADE_FAIXA_DE_SEGURANÇA
FEATURE_UNC_SAVEDFILECHECK
FEATURE_VALIDATE_NAVIGATE_URL
FEATURE_DISABLE_TELNET_PROTOCOL
FUNCIONALIDADE_WEBOC_GESTÃODEPOPUPS
Desativar compressão herdada de recursos
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 que ele está hospedando, o controle de recurso correspondente pode ser desativado.

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

Observação

Esta 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 segurança do host MSHTML: Parte I do II e Perguntas frequentes sobre segurança do host MSHTML: Parte II do II.

Para o seu executável, considere ativar os seguintes controlos de funcionalidades ao definir o valor do Registo para 1.

Controlo de Funcionalidades
Detecção de Finalidade Repurpose do ActiveX
FEATURE_BLOCK_LMZ_IMG
FEATURE_BLOCK_LMZ_OBJECT
FEATURE_BLOCK_LMZ_SCRIPT
FEATURE_RESTRICT_RES_TO_LMZ
FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7
RECURSO_MOSTRAR_DIALOGO_AVISO_PROTOCOLO_APP
FEATURE_LOCALMACHINE_LOCKDOWN
FUNÇÃO_FORÇAR_ENDEREÇO_E_ESTADO
FUNÇÃO_ZONA_RESTRITA_QUANDO_ARQUIVO_NÃO_ENCONTRADO

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

Controlo de Funcionalidades
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

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

Os XBAPs executados no Internet Explorer também obtêm um nível adicional de segurança em comparação com os aplicativos autônomos normais. Essa segurança adicional ocorre porque o Internet Explorer e, portanto, o controle ActiveX do 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 Compreendendo e trabalhando no modo protegido Internet Explorer.

Observação

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

Desativando assemblies APTCA para aplicativos cliente parcialmente confiáveis

Quando assemblies gerenciados são instalados no cache de assembly global (GAC), 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, apenas aplicativos cliente gerenciados totalmente confiáveis podem usá-los. Para permitir que aplicativos parcialmente confiáveis os utilizem, eles devem ser marcados com o AllowPartiallyTrustedCallersAttribute (APTCA). Somente assemblies que foram testados para serem seguros para execução em confiança parcial devem ser marcados com esse atributo.

No entanto, é possível que uma montagem APTCA apresente uma falha de segurança depois de ser instalada 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 depois que o problema é descoberto. Uma opção para a atualização é desinstalar o assembly, embora isso possa quebrar outros aplicativos cliente totalmente confiáveis que usam o assembly.

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

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

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

Segue-se 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

Esta chave estabelece uma entrada para o APTCA assembly. Você também precisa criar um valor nesta chave que ative ou desative o conjunto. A seguir estão os detalhes do valor:

  • Nome do valor: APTCA_FLAG.

  • Tipo de valor: REG_DWORD.

  • Dados do valor: 1 a desativar; 0 para habilitar.

Se um assembly tiver que ser desabilitado para aplicativos cliente parcialmente confiáveis, pode criar uma atualização que crie a chave e o valor de registo.

Observação

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

Comportamento em sandbox para arquivos XAML isolados

Arquivos XAML soltos são arquivos XAML apenas de marcação que não dependem de nenhum código subjacente, manipulador de eventos ou assembly específico da aplicação. Quando arquivos XAML independentes são abertos diretamente no navegador, eles são carregados numa sandbox de segurança com base no conjunto de permissões padrão da zona de Internet.

No entanto, o comportamento de segurança é diferente quando se navega por arquivos XAML soltos a partir de um NavigationWindow ou Frame num 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 perspetiva de segurança, particularmente 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 ao serem navegados. 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 é 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 num aplicativo independente seja implementada com base na infraestrutura de alojamento do navegador WPF, envolvendo o processo PresentationHost, o nível de segurança é ligeiramente menor do que quando o conteúdo é carregado diretamente no Internet Explorer no Windows Vista e Windows 7 (que ainda seria através do PresentationHost). Isso ocorre porque um aplicativo WPF autônomo usando um navegador da Web não fornece o recurso de segurança adicional do Modo Protegido do Internet Explorer.

Recursos para desenvolver aplicativos 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 Diretrizes de segurança de padrões e práticas para aplicativos
CAS Segurança de Acesso ao Código
ClickOnce Segurança e Implementação do ClickOnce
WPF (Windows Presentation Foundation) Segurança de Confiança Parcial do WPF

Ver também