Olá pessoal,
Infelizmente é de conhecimentos de poucos que o arquivo web.config é inacessível.
Quando digo inacessível, quero dizer através da url.
Tente por curiosidade acessar o arquivo web.config de uma aplicação .net.
Vocês irão notar uma mesangem de erro parecida com a imagem abaixo.
.gif" width="594" border="0" />
Mas algumas vezes esse arquivo pode cair nas mãos erradas.
Imagine se as configurações abaixo cair nas mãos erradas?
Pode ser incalculável o prejuízo.
<appSettings>
<add key="PathXmlConfig" value="c:\config\"/>
<add key="ChaveCriptografia"
value="fgnjkuit7435jksd76435437843hf78902435h"/>
</appSettings>
<connectionStrings>
<add name="ConexaoBanco"
connectionString="Data Souce=192.168.0.7;
Initial Catalog=Vendas;
User ID=sa;
Password=sa;"/>
</connectionStrings>
Essas são informações que normalmente estão presentes no arquivo.
Para dar mais segurança aos nossos aplicativos, vamos criptografar a sessão “ConnectionStrings”.
.gif" rel="WLPP">
Para criptografar a sessão vamos usar o comando “aspnet_regiis”.
Para mais detalhes, visite a sessão “Referência” ao final deste artigo.
O comando é bem simples.
aspnet_regiis.exe -pef [Sessão] [Pasta_Web_Config]
O comando vai fazer com que a sessão “connectionStrings” fique assim:
<connectionStrings
configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod
Algorithm=http://www.w3.org/2001/04/xmlenc#tripledes-cbc />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>
CtnUf1Oeki4zi9VdhFooOxvU/eZ+…
</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>
kzh5uaOfXEsrz/U3yp4gAMX1NfOdeqs+mnq0…
</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
Eu minimizei o conteúdo da tag “CipherValue”, por que o conteúdo é muito grande.
Para fazer o caminho de volta, vamos usar o mesmo comando, só que com o parâmetro “pdf”
no lugar de “pef”. O comando ficará assim:
aspnet_regiis.exe -pdf [Sessão] [Pasta_Web_Config]
E para demonstrar que esse comando funciona em qualquer sessão, vou usá-lo na sessão appSettings.
O resultado será o seguinte:
<appSettings configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>X4kpfxvqnVB4ET479PjsBT/Vk58xXL8…
</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>Fi5Z2wsBL6iaWNOePuK1cIoQocmZKN9AM8Mdba…
</CipherValue>
</CipherData>
</EncryptedData>
</appSettings>
O código abaixo mostra aos céticos que mesmo criptografada a chave pode ser lida normalmente.
Não necessitando que o desenvolvedor descriptografe a sessão appSettings antes de ler.
O visual studio é responsável por fazer isso.
protected void Page_Load(object sender, EventArgs e) {
Response.Write("Valor da chave <b>PathXmlConfig</b>: ");
Response.Write(ConfigurationManager.AppSettings["PathXmlConfig"]);
Response.Write("<br />");
Response.Write("Valor da chave <b>ChaveCriptografia</b>: ");
Response.Write(ConfigurationManager.AppSettings["ChaveCriptografia"]);
}
Podemos notar que o código tem a única e exclusica função de mostrar o conteúdo das chaves,
e não descriptografar. Esse código resulta na tela abaixo.
.gif" rel="WLPP">
Até a próxima pessoal.
Conclusão
Podemos concluir que podemos criptografar qualquer sessão do web.config
com o comando aspnet_regiis. Mas tome muito cuidado. Use consciente o comando, por que quanto
mais complexa for a criptografia, mais lenta será a leitura das chaves.
Referência
MSDN - Comando aspnet_regiis
MSDN - Encrypting and Decrypting Configuration Sections
Posted
1 Jun 2009 21:46
by
Marcos Sabino Filho