Proteger dados ASP.NET com o DPAPI
Embora o .NET forneça algumas classes de criptografia, uma abordagem mais eficiente para desenvolvedores ASP.NET é implementar DPAPI (Data Protection API). Veja como usar o DPAPI para proteger o arquivo Web.config.
Criar aplicativos seguros é mais importante hoje do que nunca. Para desenvolvedores ASP.NET, dados confidenciais que residem em arquivos de configuração, como Web.config, devem ser protegidos contra olhares curiosos através da criptografia. Embora o .NET Framework forneça um conjunto de classes de criptografia, uma abordagem mais elegante e eficiente é usar a API (Data Protection API) incorporada nos sistemas operacionais Windows 2000 e Windows XP. Vamos ver como você pode tirar proveito do DPAPI em suas aplicações de ASP.NET. DPAPI 101 Começando pelo Windows 2000, a Microsoft começou a incluir uma API para executar criptografia em nível de aplicativo e descriptografia de dados.
Esta API consiste em duas funções, CryptProtectData e CryptUnprotectData, expostas pelo Crypt32.dll como parte da API Cripto. Essas duas funções usam o algoritmo TripleDES (TripleDES) testado no tempo para proteger os dados. TripleDES é um algoritmo simétrico, o que significa que ele usa uma única chave secreta para criptografia e descriptografia. Como o TripleDES requer uma chave, o DPAPI usa uma chave derivada das credenciais do usuário atualmente conectado ou de uma chave em toda a máquina que pode ser usada por qualquer processo em execução na máquina. Embora a primeira seja uma abordagem mais segura, esta última pode ser usada para aplicativos baseados em servidor, como ASP.NET quando usuários não confiáveis não podem fazer logon na máquina. A chave pode ser opcionalmente aumentada com um segredo específico do aplicativo referido como entropia secundária.
Mais informações Para saber mais sobre como o DPAPI usa chaves, consulte “Windows Data Protection” no MSDN.
Como você pode imaginar, os benefícios de usar o DPAPI não são apenas que os aplicativos recebem um algoritmo de criptografia forte, mas também que eles não têm que lidar, proteger ou lembrar o valor secreto da chave. DPAPI e ASP.NET
Então, como isso afeta ASP.NET desenvolvedores?
Em aplicativos ASP.NET, é uma prática comum colocar dados de configuração de aplicativos, como strings de conexão e caminhos de arquivos, no arquivo Web.config colocado no diretório virtual do aplicativo. ASP.NET protege este arquivo das solicitações HTTP GET usando um manipulador HTTP chamado HttpForbiddenFileHandler, configurado no arquivo Machine.config. Mas esses dados devem ser criptografados, especialmente se a sequência de conexão, por exemplo, contiver um nome de usuário ou senha. Para criptografar os dados no Web.config, ASP.NET desenvolvedores muitas vezes recorrem às classes de criptografia no namespace System.Security.Cryptography, conforme descrito neste artigo Builder.com .
Embora essas classes exponham algoritmos simétricos e assimétricos, eles não fornecem gerenciamento automático de chaves, assim como o DPAPI. Como resultado, uma abordagem mais simples é envolver o DPAPI em uma classe gerenciada que pode ser chamada a partir de ASP.NET. O código para embrulhar o DPAPI e usá-lo a partir de ASP.NET foi discutido em livros como Writing Secure Code por Michael Howard e David LeBlanc e em artigos publicados no MSDN.
Utilização do DPAPI em ASP.NET
Embora os recursos mencionados acima forneçam o conhecimento base para o uso do DPAPI, os exemplos de código são escritos em C# e não estão integrados ao sistema de configuração ASP.NET.
Para implementar o DPAPI em seu aplicativo web ASP.NET, você pode usar as seguintes etapas simples.
Passo um Baixe e compile a classe DataProtector mostrada na Listagem A em um aplicativo de biblioteca de classe. Esta classe é a versão Visual Basic .NET do código C# publicado no MSDN, com vários aprimoramentos. Primeiro, a classe DataProtector está incluída no namespace Microsoft.Win32.DPAPI para tornar mais simples de encontrar. Em segundo lugar, adicionei os métodos sobrecarregados EncryptString e DecryptString que funcionam em texto simples e strings codificadas com base64 em vez de apenas em arrays byte. Esses métodos são ideais para ler e escrever dados para o arquivo Web.config.
Passo dois Escreva um pequeno aplicativo de console que usa a classe DataProtector para criptografar a sequência de conexão usando código como este: Dim e As String =DataProtector.EncryptString(“Nome do aplicativo=intranet;Password=atomicdoesitbetter; ID do usuário=atomic;Catálogo inicial=AtomicDotNet;Fonte de dados=127.0.0.1;”, “intranet”)
Em seguida, copie a sequência codificada de base resultante64 para o arquivo Web.config e coloque-a em uma seção de configuração específica do aplicativo, conforme mostrado na Listagem B. Observe que você precisará executar o aplicativo do console no servidor IIS para gerar a sequência codificada de base criptografada64. Isso ocorre porque a função EncryptString instrui o DPAPI a usar a chave de toda a máquina, de modo que a criptografia e a descriptografia serão válidas apenas na mesma máquina. Isso é particularmente importante se você estiver correndo em um cenário de fazenda web. Você notará que a função EncryptString no trecho acima também passa no valor de entropia secundária — neste caso, o nome do aplicativo.
Passo três Crie uma classe de manipulador de seção de configuração como a mostrada na listagem C . Esta classe lê a seção atomicSettings do arquivo Web.config automaticamente. A classe pode ser registrada na seção de configuração do arquivo Web.config assim:
Now,
sempre que o aplicativo for reiniciado ou o arquivo Web.config for alterado, o aplicativo ASP.NET invocará o método Criar da classe Utils. Este método lerá a sequência criptografada do arquivo Web.config e o descriptografará chamando o método DecryptString do DataProtector. Esse valor será então exposto ao aplicativo através da propriedade ConnectString compartilhada (estática). Dessa forma, todo o código no aplicativo precisa fazer para acessar a sequência de conexão é o seguinte:Dim c As String = Atomic.Web.Utils.ConnectString
Como resultado, a sequência de conexão é criptografada com segurança no Web.config, e ainda assim o código no aplicativo é abstraído a partir dos detalhes envolvidos na descriptografia desse valor. Proteja efetivamente dados confidenciais Ao acoplá-lo ao sistema de configuração ASP.NET com o DPAPI, ASP.NET os desenvolvedores podem proteger dados confidenciais de forma eficaz e eficiente, como strings de conexão armazenadas no arquivo Web.config.
Autor: Daniel Fox