Visual Studio.NET 2005
Olá pessoal, meu nome é Mauricio Junior. Vou mostrar como trabalhar com criptografia da string de conexão dentro do web.config. Dessa forma, qualquer pessoa, lamer, larva, hacker, cracker, phreaker ou guruque invadir o servidor e tentar abrir o banco de dados verificando em seu arquivo de configuração web.config; não conseguirá ver qual o banco de dados, senha e usuário. Com isso a segurança do seu sistema fica bem mais confiável e prático.
Se ainda não sabe qual a diferença entre eles. Disponibilizei nas referências abaixo.
|
Lamer: é o principiante que se acha o máximo. Acabou de ganhar um micro e já quer invadir os computadores do Pentágono. Normalmente são odiados pelos Hacker verdadeiros.
|
Referência: 1.1
|
Larva: Está se tornando um verdadeiro Hacker. Já consegue desenvolver suas próprias técnicas para invadir sistemas.
|
Referência: 1.2
|
Hacker: Tem conhecimentos reais de programação e de sistemas operacionais, principalmente o Unix e o Linux, que são os mais usados pelos servidores da Internet. Conhece quase todas as falhas de segurança dos sistemas e procura achar novas. Desenvolve suas próprias técnicas e programas de invação, e despreza as receitas de bolo. Tenta invadir apenas para o conhecimento, geralmente não faz nada com os dados que conseguiu pegar.
|
Referência: 1.3
|
Cracker: É o Hacker do mal, que invade sistemas, rouba dados e arquivos, números de cartão de crédito, faz espionagem industrial e destrói dados.
|
Referência: 1.4
|
Phreaker: Hacker com bons conhecimentos de telefonia que consegue inclusive fazer chamados internacionais sem pagar, o que lhe permite desenvolver seus ataques a partir de um servidor de outro país.
|
Referência: 1.5
|
Guru: O mestre dos Hackers.
|
Referência: 1.6
Depois de toda essa definição e conhecendo o inimigo, irei mostrar como evitar pelo menos uma invasão usando o arquivo de configuração de uma aplicação totalmente aberto, que é o Web.Config e App.Config.
Bom, antes de tudo segue mais uma frase criptografada para conhecimento e possibilidade de ganhar prêmios se for descriptografada.
Ftuvep nvjup f nf nboef f-nbjm dpn p ujuvmp: eftdsiruphsbgfj.
Voltando ao artigo, criei uma class libary para desenvolver um framework, porém não é necessário criar, só coloque os métodos em uma classe segura e legal. Utilizo com class libary e adiciono como referência do projeto, dessa forma fica também seguro o código porque só vai a DLL em si.
Criei uma classe chamada Criptografia.cs. (Referência 1.7)

Referência: 1.7
O primeiro método que irei criar é o que pega os valores do arquivo de configuração e descriptografa. (Referência 1.8)
|
/// <summary>
/// Método que descriptografa dados
/// Pega do App.config ou Web.Config automaticamente
/// </summary>
/// <returns></returns>
public string DecryptConnectionString()
{
Byte[] b = Convert.FromBase64String(ConfigurationSettings.AppSettings["ConnectionString"]);
string decryptedConnectionString = System.Text.ASCIIEncoding.ASCII.GetString(b);
return decryptedConnectionString;
}
|
Referência: 1.8
Explicação:
Não tem muito que explicar no método, mesmo assim tentarei clarear se tiver alguma coisa obscura. A primeira linha, pego o que está no arquivo de configuração, converto para FromBase64String deixando a mesma em uma variável do tipo byte. A segunda linha de código, pego a string do codigo ASCII passando o valor armazenado na variável anterior e depois só retorno o valor descriptografado.
Uma dica é: no meu arquivo de configuração está criptografada, no ato de usar ou conectar no banco de dados, use o método para descriptografar, ou seja, antes do Open().
Criptografando ConnectionString
Fiz um outro método que é responsável para criptografar a string de conexão. (Referência 1.9)
|
/// <summary>
/// Método para encriptografar string de conexao.
/// Pega a conexao passada
/// </summary>
/// <param name="connectionString"></param>
/// <returns></returns>
public string EncryptConnectionString(string connectionString)
{
Byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes(connectionString);
string encryptedConnectionString = Convert.ToBase64String(b);
return encryptedConnectionString;
}
|
Referência: 1.9
Explicação:
A assinatura do método é um pouco diferente do anterior, agora existe um parâmetro de entrada do tipo string. Depois, converto a string passada para o codigo ASCII, armazenando na variável (b) do tipo byte. Converti para ToBase64 a variável byte, armazenei em uma string e retornei o valor para quem chamou.
Arquivo de Configuração
Criei uma aplicação WindowForm, toda aplicação desse tipo é automaticamente usado um arquivo de configuração chamado App.Config. (Referência 2.0)
|
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ConnectionString"
value="UGFzc3dvcmQ9MTIzOyBQZXJzaXN0IFNlY3VyaXR5IEluZm89VHJ1ZTsgVXNlciBJZD1zYTsgSW5pdGlhbCBDYXRhbG9nPUJER0VDT1JFOyBEYXRhIFNvdXJjZT1zdGYtbHVpcw=="/>
</appSettings>
</configuration>
|
Referência: 2.0
Layout da tela (Referência 2.1)

Referência: 2.1
Dados da tela.
|
Label
Id = Label1
-----------------------------------------------------------------------------------------
TextBox
Id = textBox2
MultLine = True
------------------------------------------------------------------------------------------
Label
Id = Label2
------------------------------------------------------------------------------------------
TextBox
Id = textBox1
MultLine = True
-----------------------------------------------------------------------------------------
Button
Id = button1
Text = button1
|
Referência: 2.2
Cliquei duas vezes no botão, logo em seguida inclui o seguinte código. (Referência 2.3)
|
private void button1_Click(object sender, EventArgs e)
{
string con = (string) ConfigurationSettings.AppSettings["ConnectionString"];
Cript.Dados.Criptografia cript = new Cript.Dados.Criptografia();
label1.Text = "Descriptografado: " + cript.DecryptConnectionString();
label2.Text = "Criptografada: " + con;
textBox1.Text = label1.Text;
textBox2.Text = label2.Text;
}
|
Referência: 2.3
Explicação:
Primeiramente peguei a string de conexão usando o configurationsettings. Deve ser importado antes a linha: using System.Configuration;
Instanciei o a classe de criptografia criada anteriormente, armazenando a string descriptografada no label1 e a armazenada no label2.
Resultado final da aplicação criada. (Referência 2.4)

Referência: 2.4
Bom, esse é o resultado final de todo trabalho.
Fico por aqui, qualquer dúvida pode entrar em contato.
Mauricio Junior
www.ascompras.com
www.aspneti.com
mauricio@ascompras.com
