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!