Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Importante
Este 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 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 aspetos do seu aplicativo, incluindo o acesso a arquivos e dados e a impressão. Para obter mais informações sobre acesso a arquivos e dados em um ambiente de confiança parcial, consulte acesso mais seguro a arquivos e dados no Windows Forms. Para obter mais informações sobre como imprimir 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, realizar manipulação de janelas e chamar a API do Windows de aplicativos que estão sendo executados em um ambiente de segurança parcial.
Acesso à Área de Transferência
A classe UIPermission controla o acesso à á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çõ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) não é restrita. Os controles intrínsecos que aceitam colar, como uma caixa de texto, podem aceitar dados da Área de Transferência, mas os controles de usuário não podem ler programaticamente da Área de Transferência. |
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 pode programaticamente colar ou ler 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 a sua aplicação requer acesso total à área de transferência e não possui as permissões, será necessário elevar as permissões para a sua aplicação. Para obter mais informações sobre como elevar permissões, consulte Administração Geral de Políticas de Segurança.
Manipulação de janelas
A classe UIPermission 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 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 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 de fechar na barra de título. A notificação de 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 eventos de entrada do usuário sem restrições. |
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. Estas janelas mais seguras estã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 ao foco e à utilização do controlo ToolTip. |
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 dentro de um navegador é um exemplo de uma subjanela mais segura. |
NoWindows | Os usuários não podem usar nenhuma janela ou eventos da interface do usuário. Nenhuma interface de 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 restritas pelos valores SafeTopLevelWindows e SafeSubWindows. Para obter permissões exatas que são necessárias para cada membro, consulte a referência para esse membro na documentação da biblioteca de classes do .NET Framework.
A permissão SafeTopLevelWindows restringe as ações listadas na tabela seguinte.
Componente | Ações limitadas |
---|---|
Application | - Definindo a propriedade SafeTopLevelCaptionFormat. |
Control | - Obter a propriedade Parent. - Definindo a propriedade Region .- Chamar o método FindForm, Focus, FromChildHandle e FromHandle, PreProcessMessage, ReflectMessageou SetTopLevel. - Chamando o método GetChildAtPoint se o controle retornado não for filho do controle chamador. - Modificar o foco de 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 | - Obter a propriedade ActiveForm ou MdiParent. - Definir a propriedade ControlBox, ShowInTaskbarou TopMost. - Definir a propriedade Opacity abaixo de 50%. - Configurar a propriedade WindowState como Minimized programaticamente. - Chamando o método Activate. - Usando os valores de enumeração None, FixedToolWindowe SizableToolWindowFormBorderStyle. |
NotifyIcon | - O uso do componente NotifyIcon é completamente restrito. |
O valor SafeSubWindows restringe as ações listadas na tabela a seguir, além das restrições colocadas pelo valor SafeTopLevelWindows.
Componente | Ações limitadas |
---|---|
CommonDialog | - Mostrando uma caixa de diálogo derivada da classe CommonDialog. |
Control | - Chamando o método CreateGraphics. - Definindo a propriedade Cursor. |
Cursor | - Definindo a propriedade Current. |
MessageBox | - Chamando o método Show. |
Hospedagem de controles de terceiros
Outro tipo de manipulação de janela pode ocorrer se seus formulários hospedarem controles de terceiros. Um controlo de terceiros é qualquer UserControl personalizado que você não desenvolveu e compilou por si mesmo. Embora o cenário de hospedagem seja difícil de explorar, é teoricamente possível para um controle de terceiros expandir sua superfície de renderização para cobrir toda a área do seu formulário. Esse controle pode então 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ê pode confiar. Se você usa controles de terceiros baixados de uma fonte não verificável, recomendamos que você revise o código-fonte para possíveis explorações. Depois de verificar que a fonte não é maliciosa, deverás compilar a compilação tu próprio para garantir que a fonte corresponda à compilação.
Chamadas de API do Windows
Se o design do seu aplicativo exigir a chamada de uma função da API do Windows, você está 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 classe SecurityPermission e o valor UnmanagedCode da enumeração SecurityPermissionFlag controlam o acesso ao código não gerenciado. Um aplicativo pode acessar código não gerenciado somente quando recebe a permissão UnmanagedCode. Por padrão, apenas os aplicativos que estão sendo executados localmente podem chamar código não gerenciado.
Alguns membros do Windows Forms fornecem 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 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 evento |
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 seu 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 não houver meios alternativos 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 Dangerous Permissions and Policy Administration. Para obter mais informações sobre como elevar permissões, consulte Administração Geral de Políticas de Segurança.
Ver também
.NET Desktop feedback