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 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 do WPF são hospedados pelo Windows Internet Explorer ou Firefox e podem ser aplicativos de navegador XAML (XBAPs) ou documentos XAML soltos (Extensible Application Markup Language) Para obter mais informações, consulte Visão geral dos aplicativos de navegador XAML do WPF.
Aviso
Os XBAPs exigem navegadores legados para operar, como o Internet Explorer e versões antigas do Firefox. Esses navegadores mais antigos geralmente não são compatíveis com Windows 10 e 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 frequentes sobre aplicativos hospedados no navegador do WPF (XBAP).
Os aplicativos hospedados no navegador do WPF são executados em uma área restrita de segurança de confiança parcial, por padrão, que é limitada ao conjunto de permissões de zona da Internet CASpadrão. Isso isola efetivamente os aplicativos hospedados no navegador do WPF do computador cliente da mesma forma 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:
Desabilitando os assemblies APTCA para aplicativos cliente parcialmente confiáveis
Recursos para o desenvolvimento de aplicativos do 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 é 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:
O tipo de conteúdo considerado seguro para um XBAP navegar é 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 dá 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 Recursos, conteúdo e arquivos de dados do aplicativo WPF.
É 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 .Frame
Zona. O conteúdo da navegação localiza-se na Internet ou na intranet local.
Protocolo. O protocolo 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 pode ser executada pelo Internet Explorer ou a partir dele, 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:
Abra o Painel de Controle.
Clique em Rede e Internet e, em seguida, 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 as configurações de segurança serão definidas.
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.
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.
Configurações do Registro de WPF relacionadas à segurança
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 o aplicativo estiver interagindo com o script hospedado usando o método e a InvokeScript ObjectForScripting propriedade. Para obter mais informações, consulte Visão geral de Suplementos do WPF.
Se o aplicativo usar 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 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 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 recursos 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 de confiança parcial (XBAP) que inclua 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 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 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 Entendendo e trabalhando 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 por causa da política de segurança do WPF.
Desabilitando os 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 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 conjunto 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 de valor: 1 para desativar; 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 pela desabilitação dessa maneira porque são necessários para que os aplicativos gerenciados sejam executados. 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 de zona da Internet padrão.
No entanto, o comportamento de segurança é diferente quando arquivos XAML soltos são navegados de um NavigationWindow ou Frame em um aplicativo autônomo.
Em ambos os casos, o arquivo XAML solto para o qual é navegado herda as permissões de seu aplicativo host. No entanto, esse comportamento pode ser indesejável do ponto de vista da segurança, especialmente se um arquivo XAML solto tiver sido produzido por uma entidade que não é confiável ou desconhecida. Esse tipo de conteúdo é conhecido como conteúdo externo e pode Frame NavigationWindow 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 Windows 7 (que ainda seria por meio de 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 promovam 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
.NET Desktop feedback