Monday, August 20, 2007

ASP.NET x WEB.CONFIG
Eu existo!! Embora continue no barco, atolado de trampo (e sem paciencia para postar aqui) achei uma coisa interessante enquanto desenvolvia uma aplicação web ASP.NET

Sabe aquele dilema sobre "o que fazer com as informações de ConnectionString, credencial de contexto e etc" ?

Então, descobri que é possivel criptografar o web.config (todo ou só alguns campos). Não acho interessante criptografar tudo, mas pelo menos o usuário utilizado para rodar o ASP.NET e a ConnectionString (caso sua aplicação fale com banco de dados).

Alias, eu rodo a aplicação ASP.NET sob o contexto de um usuário de rede, dou permissão customizada para este usuário no banco e criptografo as seguintes partes do web.config:

identity
connectionStrings
Para utilizar isso fica muito facil:
Alterar o web.config incluindo a sua connectionString (servidor, datasource, etc, etc):
<connectionStrings> <add name="MainConnectionString" connectionString="server=foobar.tralala-br.com;database=SEGURANCA;Trusted_Connection=yes" providerName="System.Data.SqlClient" /> </connectionStrings>

E basta alterar a sua aplicação para utilizar as informações do web.config (C#):
SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["MainConnectionString"].ConnectionString);
Agora basta criptografar: Pode se utilizar chaves RSA ou a chave DPAPI da maquina (Que é a opção que escolhi) através do aspnet_regiis.exe:
aspnet_regiis.exe -pef "connectionStrings" "C:\Inetpub\wwwroot\MeuSite" –prov "DataProtectionConfigurationProvider"
Observação: Esta tecnica protege contra quem consegue ter acesso ao arquivo web.config. Caso a pessoa tenha acesso a máquina, é possivel rodar novamente o aspnet.regiis.exe e decifrar o arquivo sem problemas. Caso rode o aspnet_regiis.exe em outra máquina, não conseguirá pois a chave DPAPI é diferente.
VP