Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
Desabilitando assemblies APTCA para aplicativos cliente parcialmente confiáveis
Comportamento de caixa de areia para arquivos XAML independentes
Recursos para o desenvolvimento de aplicativos WPF que promovem a segurança
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:
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:
Abra o Painel de Controle.
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
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 .
Configurações do Registro do WPF relacionadas à segurança
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
.NET Desktop feedback