Considerações de Segurança Adicionais em Formulários do Windows

As configurações de segurança do .NET Framework podem fazer com que o aplicativo seja executado em um ambiente parcialmente confiável de forma diferente de seu computador local.O .NET Framework restringe o acesso a esses recursos locais críticos como o sistema de arquivos, rede e APIs não gerenciadas, entre outras coisas.As configurações de segurança afetam a capacidade para chamar a API Win32 da Microsoft ou outras APIs que não podem ser verificadas pelo sistema de segurança.A segurança também afeta outros aspectos do seu aplicativo, incluindo acesso a dados e arquivos e a impressão.Para obter mais informações sobre acesso a dados e arquivos em um ambiente de confiança parcial, consulte Acesso a Dados e Arquivos nos Formulários do Windows Mais Seguro.Para obter mais informações sobre a impressão em um ambiente de confiança parcial, consulte Impressão Mais Segura em Formulários do Windows.

As seções a seguir abordam como trabalhar com a Área de transferência, fazer uma manipulação de janela e chamar a API do Win32 de aplicativos que estão sendo executados em um ambiente parcialmente confiável.

Área de Transferência do Access

A classe UIPermission controla o acesso a Área de transferência, e o valor de enumeração UIPermissionClipboard associado indica o nível de acesso.A tabela a seguir mostra os níveis de permissão possíveis.

Valor UIPermissionClipboard

Descrição

AllClipboard

A área de transferência pode ser usada sem restrição.

OwnClipboard

A área de transferência pode ser usada com algumas restrições.A capacidade para colocar dados na área de transferência (operações de comando Recortar ou Copiar) é irrestrita.Controles intrínsecos que aceitam colar, como uma caixa de texto, podem aceitar dados da Área de Transferência, mas controles de usuário não podem ler a partir da Área de transferência por meio de programação.

NoClipboard

A área de transferência não pode ser usada.

Por padrão, a zona da intranet local recebe acesso AllClipboard e a zona da Internet recebe acesso OwnClipboard.Isso significa que o aplicativo pode copiar dados para a Área de Transferência, mas o aplicativo não podem colar ou ler a partir da Área de transferência via programação.Essas restrições impedem que programas sem-confiança leiam conteúdo copiado para a Área de Transferência por outro aplicativo.Se seu aplicativo requer acesso completo da Área de Transferência mas você não tem as permissões, você terá que elevar as permissões do seu aplicativo.Para obter mais informações sobre elevar permissões, consulte Diretiva de segurança geral de administração.

Manipulação de Janelas

A classe UIPermission também controla a permissão para executar manipulação de janelas e outras ações diretamente relacionadas, e o valor de enumeração UIPermissionWindow associado indica o nível de acesso.A tabela a seguir mostra os níveis de permissão possíveis.

Por padrão, a zona da intranet local recebe acesso AllWindows e a zona da Internet recebe acesso SafeTopLevelWindows.Isso significa que na zona da Internet, o aplicativo pode executar a maioria das ações de janelamento e interface do usuário, mas a aparência da janela será modificada.A janela modificada exibe um balão de notificação quando executada pela primeira vez, contém o texto modificado da barra de título e requer um botão fechar na barra de título.O balão notificação e a barra de título identificam para o usuário do aplicativo que o mesmo está sendo executado em confiança parcial.

Valor UIPermissionWindow

Descrição

AllWindows

Os usuários podem usar todas as janelas e entrada do usuário eventos sem restrição.

SafeTopLevelWindows

Usuários podem usar somente janelas mais seguras de nível superior e subjanelas mais seguras para desenho e somente os eventos entrada do usuário para a interface do usuário dentro dessas subjanelas e janelas de nível superior.Essas janelas seguras são rotuladas claramente e têm restrições tamanho mínimo e máximo.As restrições previnem ataques de falsificação potencialmente prejudiciais, como imitar telas de logon do sistema ou da área de trabalho do sistema e restringe o acesso a janelas pais via programação, APIs relacionadas a foco e o uso do controle ToolTip,

SafeSubWindows

Os usuários podem somente usar subjanelas seguras para desenho e usar somente os eventos entrada do usuário para a interface do usuário dentro desta subjanela.Um controle exibido dentro de um navegador é um exemplo de uma subjanela segura.

NoWindows

Os usuários não poderão usar as janelas ou eventos da interface do usuário.Nenhuma interface do usuário pode ser usada.

Cada nível de permissão identificado pela enumeração UIPermissionWindow permite menos ações do que o nível acima dele.As tabelas a seguir indicam as ações que são restritos pelos valores SafeTopLevelWindows e SafeSubWindows.Para as permissões exatas que são necessárias para cada membro, consulte a referência para este membro na documentação da biblioteca de classes do Framework .NET.

A permissão SafeTopLevelWindows restringe as ações listadas na tabela a seguir.

Componente

Ações Restritas

Application

Control

Cursor

  • Definindo a propriedade Clip.

  • Chamando o método Hide.

DataGrid

Form

NotifyIcon

  • Usar o componente NotifyIcon é totalmente restrito.

O valor SafeSubWindows restringe as ações listadas na tabela a seguir, junto com as restrições colocadas pelo valor SafeTopLevelWindows.

Componente

Ações Restritas

CommonDialog

  • Mostrando uma caixa de diálogo derivada da classe CommonDialog.

Control

Cursor

MessageBox

  • Chamando o método Show.

Hospedagem de Controles de Terceiros

Outro tipo de manipulação de janela pode ocorrer se os formulários hospedarem controles de terceiros.Um controle de terceiros é qualquer UserControl personalizados que você não tenha desenvolvido e compilado você mesmo.Embora o cenário de hospedagem é difícil de explorar, é teoricamente possível que um controle de terceiros expanda sua área de processamento para cobrir toda a área do formulário.Esse controle, em seguida, pode imitar um caixa de diálogo crítica e solicitar informações como números de conta bancária ou combinações de senha/nome de usuário de seus usuários.

Para limitar esse risco em potencial, use controles de terceiros apenas de fornecedores em que você pode confiar.Se você usar controles de terceiros que você baixou a partir de uma fonte não verificável, recomendamos que você revise o código-fonte para possíveis explorações.Após ter verificado que a fonte é bem-intencionada, você deve compilar o assembly você mesmo para garantir que a fonte corresponda ao assembly.

Chamadas ao API do Win32

Se o projeto do seu aplicativo necessita chamar uma função da API do Win32, você está acessando código não gerenciado.Nesse caso, as ações do código para a janela ou sistema operacional não podem ser determinadas quando você estiver trabalhando com chamadas ou valores da API do Win32.A classe SecurityPermission e o valor UnmanagedCode da enumeração SecurityPermissionFlag controlam o acesso a código não gerenciado.Um aplicativo pode acessar código não gerenciado apenas quando ele recebe a permissão UnmanagedCode.Por padrão, somente aplicativos que estão sendo executados localmente podem chamar código não gerenciado.

Alguns membros dos Formulários do Windows fornecem um acesso não gerenciado que requer a permissão UnmanagedCode.A tabela a seguir lista os membros no namespace System.Windows.Forms que exigem a permissão.Para obter mais informações sobre as permissões que são necessárias para um membro, consulte a documentação da biblioteca de classes do Framework .NET.

Componente

Membro

Application

CommonDialog

Control

Help

NativeWindow

Screen

SendKeys

Se seu aplicativo não tiver permissão para chamar código não gerenciado, seu aplicativo deve solicitar permissão UnmanagedCode, ou você deve considerar maneiras alternativas de implementar recursos; em muitos casos, os Formulários do Windows fornecem uma alternativa gerenciada para funções da API do Win32.Se não existe nenhum meio alternativo e o aplicativo deve acessar código não gerenciado, você terá que elevar as permissões do aplicativo.

Permissão para chamar código não gerenciado permite que um aplicativo execute quase qualquer coisa.Portanto, a permissão para chamar código não gerenciado deve ser concedida somente para aplicativos que vêm de uma fonte confiável.Como alternativa, dependendo do aplicativo, a parte da funcionalidade do aplicativo que faz a chamada para código não gerenciado poderia ser opcional, ou ativada no ambiente de confiança total somente.Para obter mais informações sobre permissões perigosas, consulte Permissões perigosas e administração de Diretivas.Para obter mais informações sobre elevar permissões, consulte Administração de diretiva de segurança geral.

Consulte também

Conceitos

Acesso a Dados e Arquivos nos Formulários do Windows Mais Seguro

Impressão Mais Segura em Formulários do Windows

Visão Geral da Segurança em Formulários do Windows

ClickOnce Implantação and Segurança

Outros recursos

Segurança dos Formulários do Windows