Compartilhar via


Considerações adicionais de segurança nos Windows Forms

Importante

Esse conteúdo só se aplica ao .NET Framework, a menos que especificado de outra forma.

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 as 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 nos Windows Forms. Para obter mais informações sobre impressão em um ambiente de confiança parcial, consulte Impressão Mais Segura nos Windows Forms.

As seções a seguir discutem como trabalhar com a Área de Transferência, executar a manipulação da janela e chamar a API do Windows de aplicativos que estão em execução 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 possíveis níveis de permissão.

Valor de UIPermissionClipboard Descrição
AllClipboard A Área de Transferência pode ser usada sem restrições.
OwnClipboard A Área de Trabalho pode ser usada com algumas restrições. A capacidade de colocar dados na Área de Transferência (operações de comando Copiar ou Cortar) é irrestrita. Controles intrínsecos que aceitam colar, como uma caixa de texto, podem aceitar dados da Área de Transferência, mas os controles do usuário não podem ser lidos programaticamente da Área de Transferência.
NoClipboard A Área de Transferência não pode ser usada.

Por padrão, a zona intranet local recebe AllClipboard acesso e a zona da Internet recebe OwnClipboard 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 da Área de Transferência. Essas restrições impedem programas que não possuem confiança total de lerem o conteúdo copiado para a Área de Transferência por outro aplicativo. Se seu aplicativo exigir acesso completo à Área de Transferência, mas você não tiver as permissões, será necessário elevar as permissões do seu aplicativo. Para obter mais informações sobre como elevar permissões, consulte Administração Geral de Política de Segurança.

Manipulação de janela

A UIPermission classe também controla a permissão para executar a manipulação de janela 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 possíveis níveis de permissão.

Por padrão, a zona intranet local recebe AllWindows acesso e a zona da Internet recebe SafeTopLevelWindows 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 da barra de título modificado e requer um botão fechar na barra de título. A notificação de balão e a barra de título identificam ao usuário do aplicativo que o aplicativo está em execução sob confiança parcial.

Valor do UIPermissionWindow Descrição
AllWindows Os usuários podem usar todos os eventos de entrada do windows e do usuário sem restrições.
SafeTopLevelWindows Os usuários só podem usar janelas de nível superior mais seguras e subbobinas mais seguras para desenho e podem usar apenas eventos de entrada do usuário para a interface do usuário dentro dessas janelas de nível superior e subbobinas. Essas janelas mais seguras são claramente rotuladas e têm restrições de tamanho mínimo e máximo. As restrições impedem ataques de falsificação potencialmente prejudiciais, como a imitação de telas de logon do sistema ou da área de trabalho do sistema, e restringem o acesso programático a janelas principais, APIs relacionadas com foco, e o uso do componente ToolTip.
SafeSubWindows Os usuários só podem usar subjanelas mais seguras para desenho, 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 é exemplo de uma subjanela mais segura.
NoWindows Os usuários não podem usar janelas ou eventos de interface do usuário. Nenhuma interface do usuário pode ser usada.

Cada nível de permissão identificado pela UIPermissionWindow enumeração permite menos ações do que o nível acima dele. As tabelas a seguir indicam as ações que são restritas pelos valores SafeTopLevelWindows e SafeSubWindows. Para obter permissões exatas necessárias para cada membro, consulte a referência desse 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 Definindo a propriedade SafeTopLevelCaptionFormat.
Control - Obtendo a propriedade Parent.
Definindo a propriedade Region.
- Chamando o método FindForm, Focus, FromChildHandle e FromHandle, PreProcessMessage, ReflectMessage ou SetTopLevel.
- Chamar o método GetChildAtPoint se o controle retornado não for um filho do controle de chamada.
– Modificar o foco do controle dentro de um controle de contêiner.
Cursor Definindo a propriedade Clip.
- Chamando o método Hide.
DataGrid - Chamando o método ProcessTabKey.
Form - Obtendo a propriedade ActiveForm ou a propriedade MdiParent.
- Definindo a propriedade ControlBox, a propriedade ShowInTaskbar ou a propriedade TopMost.
- Definindo a Opacity propriedade abaixo de 50%.
- Definindo a propriedade WindowStateMinimized programaticamente.
- Chamando o método Activate.
- Usando os valores de enumeração None, FixedToolWindow, e SizableToolWindowFormBorderStyle.
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 método CreateGraphics.
Definindo a propriedade Cursor.
Cursor Definindo a propriedade Current.
MessageBox - Chamando o método Show.

Hospedando controles de terceiros

Outro tipo de manipulação de janela poderá ocorrer se os formulários hospedarem controles de terceiros. Qualquer controle de terceiros é um UserControl customizado que você não desenvolveu e compilou você mesmo. 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 conta bancária de seus usuários.

Para limitar esse risco potencial, use controles de terceiros somente de fornecedores em que você possa confiar. Se você usar controles de terceiros baixados de uma fonte não verificável, recomendamos que você examine o código-fonte para possíveis explorações. Depois de verificar que o código fonte não é mal-intencionado, você mesmo deve compilar o assembly para garantir que o código fonte corresponda ao assembly.

Chamadas à API do Windows

Se o design do aplicativo exigir a chamada de uma função da API do Windows, você estará acessando 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ê está trabalhando com chamadas ou valores da API do Windows. A classe SecurityPermission e o valor UnmanagedCode da enumeração SecurityPermissionFlag controlam o acesso ao código não gerenciado. Um aplicativo só pode acessar código não gerenciado quando receber 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 seguir lista os membros no System.Windows.Forms 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 - AddMessageFilter método
- CurrentInputLanguage propriedade
- Exit método
- ExitThread método
- ThreadException acontecimento
CommonDialog - HookProc método
- OwnerWndProc\método
- Reset método
- RunDialog método
Control - CreateParams método
- DefWndProc método
- DestroyHandle método
- WndProc método
Help - ShowHelp Métodos
- ShowHelpIndex método
NativeWindow - NativeWindow classe
Screen - FromHandle método
SendKeys - Send método
- SendWait método

Se o aplicativo não tiver permissão para chamar código não gerenciado, seu aplicativo deverá solicitar UnmanagedCode permissão ou você deve 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 código não gerenciado, você precisará elevar as permissões para o aplicativo.

A permissão para chamar código não gerenciado permite que um aplicativo execute a maioria das coisas. Portanto, a permissão para chamar código não gerenciado só deve ser concedida para aplicativos provenientes de uma fonte confiável. Como alternativa, dependendo do aplicativo, a parte da funcionalidade do aplicativo que torna 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 Políticas. Para obter mais informações sobre como elevar permissões, consulte Administração Geral de Política de Segurança.

Consulte também