Desenvolvimento - C#

Criptografando URL

Hoje em dia com a facilidade da web 2.0, sistemas web e serviços web; precisamos preocupar com a parte de segurança de software e rede. O que irei falar no decorrer do artigo é; explicar porque criptografar url, como criptografar a url com .NET e o passo a passo com figuras e exemplos.

por Mauricio Junior



            “Olá pessoal, antes de tudo gostaria de agradecer o time da Microsoft, nesse dia 01 de julho de 2009 eu virei MVP Microsoft de Brasília. Espero poder ajudar muito esse time com palestras, artigos, vídeos e muito mais.”

            Voltando para o nosso artigo, hoje em dia com a facilidade da web 2.0, sistemas web e serviços web; precisamos preocupar com a parte de segurança de software e rede. O que irei falar no decorrer do artigo é; explicar porque criptografar url, como criptografar a url com .NET e o passo a passo com figuras e exemplos.

Referência

Ferramenta: Visual Studio .NET 2008

Componte: DLL CriptQuery

Linguagem: C#.NET

Nível: Avançado

Introdução

            Para começar; no meu ponto de vista precisamos muito de ter segurança de dados, software e rede. O foco principal é ter segurança nos softwares que desenvolvo e gerencio. Estava vendo na internet um vídeo onde os Crackers invadiram os dados e deixaram uma cidade toda, isto é, a maior cidade do mundo conectada a internet fora do ar. O título do vídeo é: O maior cyberataque do Planeta.[1]  Segue uma parte da notícia:

Veja como a Estônia, país mais conectado do mundo, ficou offline por dias.

Você pode se surpreender mas a Estônia, pequeno país do Leste europeu e ex-membro da antiga União Soviética, é o país mais conectado do mundo. E foi este o cenário que crackers russos escolheram para promover o maior cyberataque do mundo. Em 2007, o país se viu sem possibilidade de conexão a bancos, veículos de comunicação, páginas do Governo. Até o serviço nacional de emergência (o equivalente ao nosso 190) parou de funcionar. Veja exatamente o que aconteceu e como eles deram a volta por cima nessa história.” [2]

            Para quem vê a notícia pelo vídeo, nota que uns Crackers assumiram o ataque e nem o Governo Americano conseguiu fazer nada sobre essa invasão.

            Toda essa notícia surgiu devido a falta de segurança, pode ser no software, rede ou dados. Como desenvolvedor de software, preciso garantir que o meu sistema pode ser organizado e seguro mesmo que um Hacker consiga invadir o servidor onde está hospedado o software web / site. Mesmo que consiga abrir o banco de dados, o invasor terá mais um impedimento, você pergunta, - qual impedimento?, - o impedimento de criptografia de dados dentro do banco de dados.

            O mínimo possível de segurança deve ser feito quando desenvolvo algum aplicativo web. E o que vou mostrar é uma criptografia de url para ativação de usuário, por exemplo: Imagine que você tem um site na internet com cadastro completo. O melhor coisa depois do usuário cadastrar o seu e-mail com seus dados, é pedir a ativação do mesmo mandando um e-mail para a sua caixa postal automaticamente.

Explicação do Problema

            Até agora, não tem nada de novo com isso, só que dependendo do link que enviar; caso o usuário saiba mais um pouco de computador, tecnologia da informação, ele pode ativar outros usuários inválidos.

            Isso porque o link pode ser alterado simplesmente trocando as letras ou números, por exemplo: um link www.SITE.com.br/cadastro/ativar.aspx?usu=email@email.com. Este link é uma idéia de que geralmente recebemos quando preencho um cadastro não seguro. Eu nem mesmo estou contando com https, ssl e outros parâmetros de rede.

            Você concorda comigo que eu posso colocar outro e-mail no local de email@email.com e ativar outro e-mail que não seja o meu? Se o link for www.SITE.com.br/cadastro/ativar.aspx?chave=12 eu posso trocar o número sem problema e ativar outro cadastro que não seja o meu.

            Tudo isso pode ser evitado se utilizar criptografia na url e a mesma verificada. O próximo passo será mostrar o exemplo passo a passo.

Exemplo de Código

            O link gerado para ativar o usuário foi esse:

http://localhost:2772/criptografiaUrl.aspx?chave=s6GjQ2BpS3RjCN33Uy36XGOTzXjbYFmVeglJflWbakkXRjOOHjxZSCvTHxZJ32FQ%2bJn5Eehlb8LRra1qQS2k%2fg%3d%3d

            Ao tentar acessar esse link para ativar o cadastro, a criptografia é verificada e no caso de ser inválida uma mensagem é mostrada.

            Abri o Visual Studio .NET 2008 e adicionei como references a dll utilizada, chamada CriptQuery. (imagem 1.1)

Imagem 1.1

            Note que a figura 1.1 mostra selecionado a dll referenciada, além de outras também mas, o que foi usado foi apenas a selecionada.

            A única que fiz foi: gerar um e-mail e gerar uma url (Code 1.1).

protected void Page_Load(object sender, EventArgs e)

        {

            if (Request["chave"] == null)

            {

                CriptQuery.SecureQueryString sec = new SecureQueryString();

                sec["email"] = "mauricio@abc.com.br";

                Response.Redirect("http://localhost:2772/criptografiaUrl.aspx?chave=" + sec.ToString());

            }

        }

Code 1.1

Explicação:

            No Page_Load da página verifiquei se o parâmetro chavei estava sendo passada, se for igual a null, criei uma instância chamada secCriptQuery.SecureQueryString sec = new SecureQueryString();

            Após a instância criada, gerei um array com o nome de email dentro de sec instanciado. Igualei o mesmo ao e-mail que gostaria de criptografar, ou seja, o e-mail que preciso ativar junto ao sistema. Esse link no final seria enviado via e-mail ao usuário.                 sec["email"] = "mauricio@abc.com.br";

            A próxima linha foi gerar uma url passando como parâmetro a chave e a variável sec.ToString()Response.Redirect("http://localhost:2772/criptografiaUrl.aspx?chave=" + sec.ToString());

Imagem 1.2

            A imagem 1.2 mostra apenas como ficou o código.

Depois de criar código (code 1.1) executei o código e me mostrou um resultado. (Imagem 1.3)

Imagem 1.3

            Note a criptografia feita no topo da página.

            O próximo passo é clicar no botão enviar e descriptografar o dado mostrando na página.

Descriptogrando URL

            Para descriptografar, preciso pegar o dado e enviar como parâmetro de entrada na instância. (Code 1.2)

private void descriptografar(string p)

        {

            try

            {

                CriptQuery.SecureQueryString sec = new SecureQueryString(p);

                Response.Write(sec["email"].ToString());

            }

            catch (Exception ex)

            {

                Response.Write("URL Inválida " + ex.Message);

            }

        }

Code 1.2

Explicação:

            Note que gerei um novo método privado que não retorna valor e recebe uma string na entrada do método. O passo seguinte foi colocar dentro do try uma nova instância e com uma diferença, isto é, enviando no final da instância o parâmetro de entrada.

CriptQuery.SecureQueryString sec = new SecureQueryString(p);

            Depois, escrevi na tela o resultado do array criado anteriormente, ou seja, com o mesmo nome Response.Write(sec["email"].ToString());

            Na página principal, gerei um botão que acessa esse método descriptografar e veja o que apareceu na tela. (Imagem 1.4)

Imagem 1.4

            Se alterar alguma informação da url criptografada, ou seja, do parâmetro criptografado e clicar no botão Enviar, aparece automaticamente uma mensagem falando da invalidade da url. (Imagem 1.5)

Imagem 1.5

            Todo o controle está junto da dll adicionada dentro do projeto.

            Eu fico por aqui e qualquer dúvida pode entrar em contato.

Referência:

[1]        Olhar Digital - www.olhardigital.com.br

[2]        Vídeo Olhar Digital - [http://olhardigital.uol.com.br/central_de_videos/video_wide.php?id_conteudo=8514]

Mauricio Junior

Mauricio Junior - 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 29 anos e possuo sete livros publicados pela editora Ciência Moderna e sou editor do Linha de Código.
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.org
Site pessoal: www.mauriciojunior.org