Visão geral da Segurança do Windows Forms

Antes do lançamento do .NET Framework, todo o código em execução no computador de um usuário tinha os mesmos direitos ou permissões para acessar recursos que um usuário do computador tinha. Por exemplo, se o usuário era autorizado a acessar o sistema de arquivos, o código era autorizado a acessar o sistema de arquivos. Se o usuário era autorizado a acessar um banco de dados, o código era autorizado a acessar o banco de dados. Embora esses direitos ou permissões possam ser aceitáveis para código em executáveis que o usuário explicitamente instalou no computador local, eles podem não ser aceitáveis para código potencialmente mal-intencionado proveniente da Internet ou de uma intranet local. Esse código não deveria ser capaz de acessar recursos do computador do usuário sem permissão.

O .NET Framework introduz uma infraestrutura chamada Segurança de Acesso ao Código que permite diferenciar as permissões, ou direitos, que o código tem dos direitos que o usuário tem. Por padrão, o código proveniente da Internet e da intranet somente pode executar no que é conhecido como confiança parcial. A confiança parcial sujeita um aplicativo a uma série de restrições: entre outras coisas, um aplicativo é impedido de acessar o disco rígido local e não pode executar código não gerenciado. O .NET Framework controla os recursos que o código tem permissão para acessar com base na identidade desse código: de onde veio, se tem um Strong-Named Assemblies, se está assinado com um certificado e assim por diante.

A tecnologia ClickOnce, que você usa para implantar aplicativos do Windows Forms, ajuda a facilitar o desenvolvimento de aplicativos executados em confiança parcial, confiança total ou confiança parcial com permissões elevadas. O ClickOnce fornece recursos como Elevação de Permissão e Implantação de Aplicativo Confiável para que seu aplicativo possa solicitar confiança total ou permissões elevadas do usuário local de maneira responsável.

Noções básicas sobre segurança no .NET Framework

A segurança de acesso do código permite que o código seja confiável em graus variáveis, dependendo da origem do código e de outros aspectos de sua identidade. Para obter mais informações sobre a evidência que o Common Language Runtime usa para determinar a política de segurança, consulte Evidências. Ele ajuda a proteger os sistemas do computador contra código mal-intencionado e ajuda a proteger o código confiável contra intencionalmente ou acidentalmente comprometer a segurança. A segurança de acesso do código também oferece mais controle sobre quais ações seu aplicativo pode realizar, porque você pode especificar somente as permissões que você precisa que seu aplicativo tenha. A segurança de acesso do código afeta todo código gerenciado que se destina ao Common Language Runtime, mesmo que esse código não faça nenhuma verificação de permissão de segurança de acesso do código. Para obter mais informações sobre segurança no .NET Framework, consulte Principais conceitos de segurança e Noções básicas de segurança de acesso ao código.

Se o usuário executar um arquivo executável dos Windows Forms diretamente de um servidor Web ou de um compartilhamento de arquivos, o grau de confiança concedido ao seu aplicativo dependerá de onde reside o código e de como ele foi iniciado. Quando um aplicativo é executado, ele é automaticamente avaliado e recebe um conjunto de permissões nomeadas do Common Language Runtime. Por padrão, o conjunto de permissões de Confiança Total é concedido ao código do computador local, o conjunto de permissões de Intranet Local é concedido ao código de uma rede local e o conjunto de permissões de Internet é concedido ao código da Internet.

Observação

No .NET Framework versão 1.0 Service Pack 1 e Service Pack 2, o grupo de códigos de zona da Internet recebe o conjunto de permissões Nada. Em todas as outras versões do .NET Framework, o grupo de códigos de zona da Internet recebe o conjunto de permissões da Internet.

As permissões padrão concedidas em cada um desses conjuntos de permissão são listadas no tópico Política de segurança padrão. Dependendo das permissões que o aplicativo recebe, ele é executado corretamente ou gera uma exceção de segurança.

Muitos aplicativos do Windows Forms serão implantados usando o ClickOnce. As ferramentas usadas para gerar uma implantação do ClickOnce têm padrões de segurança diferentes dos discutidos anteriormente. Para obter mais informações, veja a seguinte discussão.

As permissões reais concedidas ao seu aplicativo podem ser diferentes dos valores padrão, porque a política de segurança pode ser modificada. Isso significa que seu aplicativo pode ter permissão em um computador, mas não em outro.

Desenvolvendo um aplicativo mais seguro dos Windows Forms

A segurança é importante em todas as etapas do desenvolvimento de aplicativos. Comece revisando e seguindo as Diretrizes de codificação segura.

Em seguida, decida se seu aplicativo deve ser executado em confiança total ou em confiança parcial. Executar o aplicativo em confiança total facilita o acesso a recursos no computador local, mas expõe seu aplicativo e os usuários a altos riscos de segurança, caso você não crie e desenvolva seu aplicativo estritamente de acordo com o tópico Diretrizes de codificação segura. Executar o aplicativo em confiança parcial facilita o desenvolvimento de um aplicativo mais seguro e reduz muito o risco, mas exige mais planejamento sobre como implementar determinados recursos.

Se você escolher a confiança parcial (isto é, os conjuntos de permissões de Internet ou de Intranet Local), decida como deseja que o aplicativo se comporte nesse ambiente. O Windows Forms fornece maneiras alternativas e mais seguras para implementar recursos quando em um ambiente semi-confiável. Certas partes do seu aplicativo, como o acesso a dados, podem ser projetadas e escritas de maneiras diferentes para ambientes de confiança total e de confiança parcial. Alguns recursos dos Windows Forms, como as configurações de aplicativo, são projetados para funcionar em confiança parcial. Para obter mais informações, consulte Visão geral de configurações de aplicativo.

Se seu aplicativo precisa de mais permissões que as concedidas pela confiança parcial, mas você não deseja executar em confiança total, você pode executar em confiança parcial, declarando somente as permissões adicionais que são necessárias. Por exemplo, se você deseja executar em confiança parcial, mas deve conceder ao seu aplicativo acesso somente leitura a um diretório no sistema de arquivos do usuário, você pode solicitar FileIOPermission somente para esse diretório. Se for usada corretamente, essa abordagem pode fornecer funcionalidade aumentada ao seu aplicativo e minimizar os riscos de segurança para seus usuários.

Ao desenvolver um aplicativo que será executado em confiança parcial, mantenha o controle sobre quais permissões seu aplicativo deve executar e quais permissões seu aplicativo pode usar opcionalmente. Quando todas as permissões forem conhecidas, você deverá fazer uma solicitação declarativa de permissão no nível do aplicativo. Solicitar permissões informa o tempo de execução do .NET Framework sobre quais permissões seu aplicativo precisa e quais permissões ele especificamente não deseja. Para obter mais informações sobre a solicitação de permissões, consulte Solicitando permissões.

Ao solicitar permissões opcionais, você deverá tratar as exceções de segurança que serão geradas se o aplicativo realizar uma ação que exija permissões que não foram concedidas a ele. O tratamento adequado do SecurityException irá garantir que seu aplicativo possa continuar a operar. Seu aplicativo pode usar a exceção para determinar se um recurso deve ser desabilitado para o usuário. Por exemplo, um aplicativo poderá desabilitar a opção de menu Salvar se a permissão de arquivo necessária não for concedida.

Às vezes é difícil saber se você declarou todas as permissões apropriadas. Uma chamada de método que parece inofensiva na superfície, por exemplo, pode acessar o sistema de arquivos em algum ponto durante sua execução. Se você não implantar seu aplicativo com todas as permissões necessárias, poderá ser bem sucedido em teste, quando você depurá-lo na área de trabalho, mas falhar ao ser implantado. O SDK do .NET Framework 2.0 e o Visual Studio 2005 contêm ferramentas para calcular as permissões de que um aplicativo precisa: a ferramenta de linha de comando MT.exe e o recurso Calcular Permissões do Visual Studio, respectivamente.

Os tópicos a seguir descrevem recursos adicionais de segurança dos Windows Forms.

Tópico Descrição
- Acesso mais seguro a arquivos e a dados nos Windows Forms Descreve como acessar arquivos e dados em um ambiente de confiança parcial.
- Impressão mais segura nos Windows Forms Descreve como acessar os recursos de impressão em um ambiente de confiança parcial.
- Considerações adicionais sobre segurança nos Windows Forms Descreve como realizar manipulação de janela, como usar a área de transferência e como fazer chamadas a código não gerenciado em um ambiente de confiança parcial.

Implantando um aplicativo com as permissões apropriadas

O meio mais comum de implantar um aplicativo do Windows Forms em um computador cliente é com o ClickOnce, uma tecnologia de implantação que descreve todos os componentes que seu aplicativo precisa executar. O ClickOnce usa arquivos XML chamados manifestos para descrever os assemblies e arquivos que compõem seu aplicativo e também as permissões que seu aplicativo requer.

O ClickOnce tem duas tecnologias para solicitar permissões elevadas em um computador cliente. As duas tecnologias contam com o uso de certificados Authenticode. Os certificados ajudam a fornecer alguma garantia para os usuários de que o aplicativo é proveniente de uma fonte confiável.

A tabela a seguir descreve essas tecnologias.

Tecnologia de permissões elevadas Descrição
Elevação de permissões Exibe ao usuário uma caixa de diálogo de segurança na primeira vez que seu aplicativo é executado. A caixa de diálogo de Elevação de permissões informa ao usuário sobre quem publicou o aplicativo, para que o usuário possa tomar uma decisão informada sobre se deve conceder confiança adicional
Implantação de aplicativo confiável Envolve um administrador do sistema realizando a instalação de um certificado Authenticode de editor em um computador cliente uma única vez. Daí em diante, todos os aplicativos assinados com o certificado serão considerados confiáveis e poderão ser executados em confiança total no computador local, sem avisos adicionais.

A tecnologia escolhida dependerá de seu ambiente de implantação. Para obter mais informações, consulte Escolhendo uma estratégia de implantação do ClickOnce.

Por padrão, os aplicativos ClickOnce implantados usando o Visual Studio ou as ferramentas SDK do .NET Framework (Mage.exe e MageUI.exe) são configurados para serem executados em um computador cliente que tenha Confiança Total. Se você estiver implantando seu aplicativo usando a confiança parcial ou usando somente algumas permissões adicionais, você terá que alterar esse padrão. Você pode fazer isso com o Visual Studio ou a ferramenta SDK do .NET Framework MageUI.exe ao configurar sua implantação. Para obter mais informações sobre como usar o MageUI.exe, consulte Demonstra Passo a passo: implantando manualmente um aplicativo ClickOnce. Consulte também Como definir permissões personalizadas para um aplicativo ClickOnce ou Como definir permissões personalizadas para um aplicativo ClickOnce.

Para obter mais informações sobre os aspectos de segurança do ClickOnce e da elevação de permissão, consulte Protegendo aplicativos ClickOnce. Para obter mais informações sobre a implantação de aplicativo confiável, consulte Visão geral da implantação de aplicativos confiáveis.

Testando o aplicativo

Se você implantou seu aplicativo Windows Forms usando o Visual Studio, você pode habilitar a depuração em confiança parcial ou um conjunto de permissões restritas do ambiente de desenvolvimento. Consulte também Como depurar um aplicativo ClickOnce com permissões restritas.

Confira também