Considerações adicionais sobre Segurança do Windows Forms

As configurações de segurança do .NET Framework podem fazer com que seu aplicativo seja executado de forma diferente em um ambiente de confiança parcial do que no computador local. O .NET Framework restringe o acesso a recursos locais críticos como o sistema de arquivos, a rede e APIs não gerenciadas, entre outras coisas. As configurações de segurança afetam a capacidade de chamar a API do Microsoft Windows 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 arquivos e dados e impressão. Para obter mais informações sobre acesso a arquivos e dados em um ambiente de confiança parcial, consulte Mais acesso seguro a arquivos e dados no Windows Forms. Para obter mais informações sobre impressão em um ambiente de confiança parcial, consulte Impressão mais segura no Windows Forms.

As seções a seguir discutem como trabalhar com a Área de Transferência, executar a manipulação de janelas e chamar a API do Windows de aplicativos que estão sendo executados em um ambiente de confiança parcial.

Acesso à Área de Transferência

A UIPermission classe controla o acesso à Área de Transferência e o valor de enumeração associado UIPermissionClipboard 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ções.
OwnClipboard A Área de Transferência pode ser usada com algumas restrições. A capacidade de colocar dados na Área de Transferência (operações de comando Copiar ou Recortar) é irrestrita. Os controles intrínsecos que aceitam colagem, como uma caixa de texto, podem aceitar dados da Área de Transferência, mas os controles de usuário não podem ler programaticamente a partir da Área de Transferência.
NoClipboard A Área de Transferência não pode ser usada.

Por padrão, a zona Intranet Local recebe acesso e a zona da Internet recebe AllClipboardOwnClipboard acesso. Isso significa que o aplicativo pode copiar dados para a Área de Transferência, mas o aplicativo não pode colar ou ler programaticamente a partir da Área de Transferência. Essas restrições impedem que programas sem confiança total leiam conteúdo copiado para a Área de Transferência por outro aplicativo. Se o aplicativo exigir acesso total à Área de Transferência, mas você não tiver as permissões, será necessário elevar as permissões para o aplicativo. Para obter mais informações sobre como elevar permissões, consulte Administração de diretiva de segurança geral.

Manipulação de janelas

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

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

Valor UIPermissionWindow Descrição
AllWindows Os usuários podem usar todas as janelas e os eventos de entrada do usuário sem restrição.
SafeTopLevelWindows Os usuários podem usar apenas janelas de nível superior mais seguras e subjanelas mais seguras para desenho, e podem usar apenas eventos de entrada do usuário para a interface do usuário dentro dessas janelas e subjanelas de nível superior. Essas janelas mais seguras são claramente rotuladas e têm restrições de tamanho mínimo e máximo. As restrições evitam ataques de falsificação potencialmente prejudiciais, como imitar telas de logon do sistema ou a área de trabalho do sistema, e restringem o acesso programático a janelas pai, APIs relacionadas ao foco e uso do ToolTip controle,
SafeSubWindows Os usuários podem usar apenas subjanelas mais seguras para desenhar e podem usar apenas eventos de entrada do usuário para a interface do usuário dentro dessa subjanela. Um controle exibido em um navegador é um exemplo de uma subjanela mais segura.
NoWindows Os usuários não podem usar as janelas ou os eventos da interface do usuário. Nenhuma interface do usuário pode ser usada.

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

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

Componente Ações restritas
Application - Configuração do SafeTopLevelCaptionFormat imóvel.
Control - Obtenção do Parent imóvel.
- Configuração do Region imóvel.
- Chamando o FindForm , e FromChildHandleFromHandle, Focus, , ReflectMessagePreProcessMessageou SetTopLevel método.
- Chamando o método se o GetChildAtPoint controle retornado não for filho do controle de chamada.
- Modificar o foco do controle dentro de um controle de contêiner.
Cursor - Configuração do Clip imóvel.
- Chamando o Hide método.
DataGrid - Chamando o ProcessTabKey método.
Form - Obtenção do ActiveForm imóvel MdiParent .
- Configuração do ControlBox, ShowInTaskbarou TopMost propriedade.
- Fixação do imóvel abaixo de Opacity 50%.
- Configuração da WindowState propriedade para Minimized programaticamente.
- Chamando o Activate método.
- Usando os Nonevalores , FixedToolWindowe SizableToolWindowFormBorderStyle enumeração.
NotifyIcon - O uso do NotifyIcon componente é completamente restrito.

O SafeSubWindows valor restringe as ações listadas na tabela a seguir, além das restrições colocadas pelo SafeTopLevelWindows valor.

Componente Ações restritas
CommonDialog - Mostrando uma caixa de diálogo derivada da CommonDialog classe.
Control - Chamando o CreateGraphics método.
- Configuração do Cursor imóvel.
Cursor - Configuração do Current imóvel.
MessageBox - Chamando o Show método.

Hospedagem de controles de terceiros

Outro tipo de manipulação de janela pode ocorrer se seus formulários hospedam controles de terceiros. Um controle de terceiros é qualquer costume UserControl que você mesmo não desenvolveu e compilou. Embora o cenário de hospedagem seja difícil de explorar, é teoricamente possível que um controle de terceiros expanda sua superfície de renderização para cobrir toda a área do formulário. Esse controle pode imitar uma caixa de diálogo crítica e solicitar informações como combinações de nome de usuário/senha ou números de contas bancárias de seus usuários.

Para limitar esse risco potencial, use controles de terceiros somente de fornecedores confiáveis. Se você usar controles de terceiros que você baixou de uma fonte não verificável, recomendamos que você revise o código-fonte para possíveis explorações. Depois de verificar se a origem não é mal-intencionada, você mesmo deve compilar o assembly para garantir que a fonte corresponda ao assembly.

Chamadas de API do Windows

Se o design do aplicativo exigir chamar uma função da API do Windows, você estará acessando o código não gerenciado. Nesse caso, as ações do código para a janela ou o sistema operacional não podem ser determinadas quando você estiver trabalhando com chamadas ou valores de API do Windows. A SecurityPermission classe e o valor da SecurityPermissionFlag enumeração controlam o UnmanagedCode acesso ao código não gerenciado. Um aplicativo pode acessar o código não gerenciado somente quando recebe a UnmanagedCode permissão. Por padrão, somente aplicativos em execução localmente podem chamar código não gerenciado.

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

Componente Membro
Application Método - AddMessageFilter
Propriedade - CurrentInputLanguage
Método - Exit
Método - ExitThread
Evento - ThreadException
CommonDialog Método - HookProc
- OwnerWndProc\método
Método - Reset
Método - RunDialog
Control Método - CreateParams
Método - DefWndProc
Método - DestroyHandle
Método - WndProc
Help Métodos - ShowHelp
Método - ShowHelpIndex
NativeWindow Classe - NativeWindow
Screen Método - FromHandle
SendKeys Método - Send
Método - SendWait

Se seu aplicativo não tiver permissão para chamar código não gerenciado, seu aplicativo deverá solicitar UnmanagedCode permissão ou você deverá considerar maneiras alternativas de implementar recursos, em muitos casos, o Windows Forms fornece uma alternativa gerenciada às funções da API do Windows. Se nenhum meio alternativo existir e o aplicativo precisar acessar o código não gerenciado, você terá que elevar as permissões para o aplicativo.

A permissão para chamar código não gerenciado permite que um aplicativo execute quase tudo. Portanto, a permissão para chamar código não gerenciado só deve ser concedida 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 pode ser opcional ou habilitada apenas no ambiente de confiança total. Para obter mais informações sobre permissões perigosas, consulte Permissões perigosas e administração de diretivas. Para obter mais informações sobre como elevar permissões, consulte Administração de diretiva de segurança geral.

Confira também