Dev (Back & Front)ARTIGO

Criptografando URL

Olá, pessoal! Antes de começar, gostaria de agradecer o time da Microsoft. Dia 01 de julho de 2009 eu me tornei MVP Microsoft de Brasília. Espero poder ajudar muito esse time, com palestras, artigos, vídeos e muito mais!

Agora, iniciando nosso artigo, hoje em dia, com a facilidade da web 2.0, sistemas web e serviços web, precisamos nos preocupar com a parte de segurança de software e rede. Vamos, aqui, explicar porque criptografar url e como fazer isso usando .NET, com um 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

Ao meu ver, precisamos muito de ter segurança de dados, software e rede. Meu foco principal é ter segurança nos softwares que desenvolvo e gerencio. Estava vendo na internet um vídeo onde crackers invadiram os dados e deixaram fora do ar um país inteiro, o país mais conectado à internet no mundo. 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 história surgiu devido à falta de segurança. Pode ser no software, na rede ou nos dados. Como desenvolvedor de software, preciso garantir que o meu sistema seja 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. Aí você pergunta, ” qual impedimento?”. O 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. A melhor coisa depois de o 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 há nada de novo nisso. Só que, caso o usuário saiba mais um pouco de computador, tecnologia da informação, e dependendo do link que enviar, 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=emailemail.com. Este link é uma idéia do que geralmente recebemos quando preenchemos 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 emailemail.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<br />	O link gerado para ativar o usuário foi esse: <br />http://localhost:2772/criptografiaUrl.aspx?chave=s6GjQ2BpS3RjCN33Uy36XGOTzXjbYFmVeglJflWbakkXRjOOHjxZSCvTHxZJ32FQ2bJn5Eehlb8LRra1qQS2k2fg3d3d

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 selecionada a dll referenciada, além de outras também, mas o que foi usado foi apenas a selecionada.

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

protected void Page_Load(object sender, EventArgs e)<br />        {<br />            if (Request["chave"] == null)<br />            {<br />                CriptQuery.SecureQueryString sec = new SecureQueryString();<br />                sec["email"] = "mauricioabc.com.br";<br />                Response.Redirect("http://localhost:2772/criptografiaUrl.aspx?chave="  sec.ToString());<br />            }<br />        }

Code 1.1

Explicação:

No Page_Load da página verifiquei se o parâmetro chave estava sendo passado, se for igual a null, é preciso criar uma instância chamada sec. CriptQuery.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”] = “mauricioabc.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)<br />        {<br />            try<br />            {<br />                CriptQuery.SecureQueryString sec = new SecureQueryString(p);<br />                Response.Write(sec["email"].ToString());<br />            }<br />            catch (Exception ex)<br />            {<br />                Response.Write("URL Inválida "  ex.Message);<br />            }<br />        }

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]

Com mais de 20 anos trabalhando no mercado de tecnologia. Mestre em Engenharia Elétrica voltada para o mundo mobile, com mais de 20 livros publicados e cerca de 700 artigos publicados com intuito de ajudar àqueles que querem aprender a programar (site, software, desktop, serviços, api e mobile). Site pessoal: https://www.mauriciojunior.net - MVP, MCAD, MCP Microsoft

Ver perfil