Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
Desativando assemblies APTCA para aplicativos cliente parcialmente confiáveis
Recursos para desenvolver aplicativos WPF que promovem a segurança
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:
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:
Abra Painel de Controlo.
Clique em Rede e Internet e, em seguida, clique em Opções da Internet.
A caixa de diálogo Opções da Internet é exibida.
Na guia Segurança , selecione a zona para a qual definir as configurações de segurança.
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.
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 .
Configurações do Registro WPF relacionadas à segurança
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
.NET Desktop feedback