LAYERDEV

 Busca Online:
 

Seja bem vindo(a) Visitante, você não está logado deseja logar
na comunidade ASPNETi.COM e participar de serviços e promoções ? clique aqui.

Criptografia de String de Conexão no Web.Config



Data Publicação: 8/3/2006 12:11:46
Total de visualizações: 12330

comente
Diminuir o tamanho das letras Aumentar o tamanho das letras


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

 



Total de visualizações: 12330
voltar   comente  subir


Comentários:


Comente (dê sua opinião): VOCÊ PRECISA LOGAR

Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Web abrindo aplicações locais
Como fechar todos os forms de um aplicativo para dispositivo móvel
Estatísticas de Acesso na Comunidade ASPNETi.COM
Prepare o Sql Server para o VS 2005
Armazenando Dados no ViewState Parte II
Detectando erro a todo custo
Microsoft Mobile Explorer 3.0
Nova geração HTML
Vídeo: Série Atlas.NET - Parte III
Vídeo do Visual SourceSafe - Parte I
Linguagem de programação: Nunca faça isso - C#.NET
Estatística - Browser de Acesso
Channel9 - Soap, OData, Json
O Avanço do Blu-Ray no Brasil
Web 2.0 - A máquina somos nós
Criando Números Aleatoriamente
Utilizando o GridView e DetailsView
Confira os 5 primeiros ganhadores da promoção assinatura online grátis DEVMEDIA.COM e ASPNETI.COM
Organizando o projeto em camada
Sistema Calcula IMC e IGC no Celular
SELECT INSERT
Evento Brasil DotNet - gratuíto
SQL Server 2005 SP2 já está disponível :)
Limpando Cache do Brownser
Trabalhando com STORED PROCEDURE
Visual SourceSafe - Série 5
Google Sync Mobile
Servidor Integrado - Visual Studio.NET
Acessando banco de dados com pocket pc
Desenvolvimento para TV Digital - Tópicos
Sistema de Login em ASP Utilizando três camadas - Parte VIII
Vídeos - Lançamento do Windows 7
Desenvolvimento de Aplicativos para TV Digital - Parte 2
Agrupar Email no Mail - MacBook
CRIANDO MENU DINÂMICO COM C#.NET Passo 1
Sobre o Autor
  [sumir] [aparecer]
 
Mauricio Junior Maurício Júnior
Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 27 anos e possuo sete livros publicados pela editora Ciência Moderna no ano de 2009. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog:  blog.mauriciojunior.orgSite pessoal  www.mauriciojunior.org

Informações Online
Usuários Online: 1518
Artigos:  729
Vídeos:  59
PodCast's:  42
Fórum:  3127
Empregos:  1359
Usuários Cadastrados: 6080
Publicidade
LAYERDEV




Enquete ASPNETi.COM
 Os podcasts tem sido proveitoso pra você?

Favor logar para votar
 
Publicidade Vertical
NETITC