Criptografando a QueryString de uma URL com ASP.NET

Postado por Daniel Garcia às 21:21 DOMINGO, 26 DE JULHO DE 2009

No desenvolvimento Web é muito comum utilizarmos querystrings para passar informações de uma página para outra.

Porém, em algumas situações o uso de querystrings pode tornar a aplicação vulnerável, permitindo que o usuário possa ter acesso a alguma informação a qual não deveria. Isso acontece em função da curiosidade do usuário, que na base da tentativa, pode alterar o valor da querystring.

Mostrarei uma maneira de inibir esse tipo de ação, utilizando uma rotina de criptografia simples, mas bastante útil, que permitirá criptografar e descriptografar a informação que será passada via querystring.

Veja a classe que chamei de “Criptografia”, contendo os métodos “Criptografar” e “Descriptografar”:

using System;
using
System.Text;
using System.IO;
using System.Security.Cryptography;

public class Criptografia 
{
    
private static byte
[] chave = { };
   
private static byte
[] iv = { 12, 34, 56, 78, 90, 102, 114, 126 };

    public Criptografia()
    {    

    }

    public static string Criptografar(string valor, string chaveCriptografia)
    {
        DESCryptoServiceProvider des; 
        MemoryStream ms; 
        CryptoStream cs; byte[] input;

        try
        {
            des = new DESCryptoServiceProvider();
            ms = new MemoryStream();

            input = Encoding.UTF8.GetBytes(valor);chave = Encoding.UTF8.GetBytes(chaveCriptografia.Substring(0, 8));

            cs = new CryptoStream(ms, des.CreateEncryptor(chave, iv), CryptoStreamMode.Write);
            cs.Write(input, 0, input.Length);
            cs.FlushFinalBlock();

            return Convert.ToBase64String(ms.ToArray());
       
}
        catch (Exception ex)
       
{
            throw ex; 
        }
    }

    public static string Descriptografar(string valor, string chaveCriptografia)
   
{
        DESCryptoServiceProvider des;
        MemoryStream ms; 
       
CryptoStream cs; byte[] input;

        try
       

            des = new DESCryptoServiceProvider();
           
ms = new MemoryStream();

            input = new byte[valor.Length];
            input = Convert.FromBase64String(valor.Replace(" ", "+"));

            chave = Encoding.UTF8.GetBytes(chaveCriptografia.Substring(0, 8));

            cs = new CryptoStream(ms, des.CreateDecryptor(chave, iv), CryptoStreamMode.Write);
           
cs.Write(input, 0, input.Length);
           
cs.FlushFinalBlock();

            return Encoding.UTF8.GetString(ms.ToArray());
       
}
       
catch (Exception ex)
       
{
            throw ex;
        }
    }
}

Para testar o funcionamento da rotinha criei dois webforms: “Pagina1.aspx” e “Pagina2.aspx”.

Na “Pagina1.aspx” adicionei um Button e implementei o seguinte código para o evento Click. Onde é montada a URL com o valor da querystring criptografado pelo método “Criptografar” da Classe “Criptografia”. Escolhi o valor 12 como ID de exemplo: 

protected void Button1_Click(object sender, EventArgs e)
{
    string url = "Pagina2.aspx?id=" + Criptografia.Criptografar("12", "#!$a36?@");

    Response.Redirect(url);
}

Já na “Pagina2.aspx”, adicionei um Label e implementei o seguinte código para o evento Load da página. E exibirá o valor da querystring, já descriptografado no Label:

protected void Page_Load(object sender, EventArgs e)
{
    string querystring = Request.QueryString["id"];

    Label1.Text = Criptografia.Descriptografar(querystring, "#!$a36?@");
}

Observe o resultado:


Querystring criptografada e resultado descriptografado

 

Agora você poderá criar aplicações mais seguras utilizando querystring.
Até a próxima e bons códigos!

5.0 ponto(s). Avaliado por 1 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

.NET Framework | ASP.NET

Comentar


(Vai mostrar seu Gravatar)  

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Sobre o Autor

Daniel Garcia - MCP, MCTS, MCPD
Meu nome é Daniel Garcia, venho atuando no mercado de tecnologia há mais de uma década. Durante esse tempo tive a oportunidade de trabalhar com diversas tecnologias, principalmente Microsoft. Conquistei os títulos: MCP, MCTS, MCDP e MCT. Desde então, venho contribuindo com toda a Comunidade, divulgando meu conhecimento das tecnologias Microsoft.