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 3 pessoas

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

Tags: ,

.NET Framework | ASP.NET

Como Serializar Objetos em XML com .NET

Postado por Daniel Garcia às 01:11 SEXTA-FEIRA, 24 DE JULHO DE 2009

Eventualmente, no desenvolvimento de aplicações, encontramos situações onde é necessário transformar um objeto em XML, ou seja, serializar um objeto em XML. Neste post mostrarei como serializar e deserializar objetos de forma simples com .NET.

O .NET Framework oferece “N” recursos para efetuar a serialização de objetos. Neste exemplo utilizarei o XmlSerializer (do namespace System.Xml.Serialization) para efetuar esta tarefa.
Vejas os passos para efetuar esta tarefa:

1 – Crie uma classe (entidade) para que possamos utilizar como teste. Como exemplo, criei uma classe chamada Produto:

public class Produto
{
    private int id;
    private string nome;
    private decimal valor;   

    public int Id
    {
        get { return id; }
        set { id = value; }
    }
 

    public string Nome
    {
        get { return nome; }
        set { nome = value; }
    }

    public decimal Valor
    {
        get { return valor; }
        set { valor = value; }
    }

    public Produto()
    {

    }

    public Produto(int id, string nome, decimal valor)
    {
        this.id = id;
        this.nome = nome;
        this.valor = valor;
    }
}

2 – Crei uma classe chamada Serializador, que será responsável pelas tarefas de Serializar e Deserializar os objetos:

using System;
using System.IO;
using System.Xml.Serialization;

public class Serializador
{
    // Serializa o objeto
    public static string Serializar(object objeto)
    {
        StringWriter writer = new StringWriter();
        XmlSerializer serializer = new XmlSerializer(objeto.GetType());

        serializer.Serialize(writer, objeto);

        return writer.ToString();
    }
    

    // Deserializa o objeto
    public static object Deserializar(string xml, Type tipo)
    {
        StringReader reader = new StringReader(xml);
        XmlSerializer serializer = new XmlSerializer(tipo);

        return serializer.Deserialize(reader);
    }
}

3 – Por fim, crie um Webform contendo um TextBox do tipo MultiLine e uma tabela com três Labels (Id, Nome e Valor), para que possamos testar os métodos da classe Serializador:

Veja o código Source do Webform:

<form id="form1" runat="server">
<div>
   
<b>Conteúdo Serializado</b><br />
   
<asp:TextBox ID="TextBox1" runat="server" Height="140px" TextMode="MultiLine" Width="550px"></asp:TextBox>
   
<br />
   
<br />
   
<b>Conteúdo Deserializado</b>
    <
br />
   
<table>
       
<tr>
           
<td>Código</td>
           
<td>&nbsp;</td>
           
<td><asp:Label ID="lblId" runat="server"></asp:Label></td>
       
</tr>
        
<tr>
           
<td>Nome</td>
           
<td>&nbsp;</td>
           
<td><asp:Label ID="lblNome" runat="server"></asp:Label></td>
       
</tr>
       
<tr>
           
<td>Valor</td>
           
<td>&nbsp;</td>
           
<td><asp:Label ID="lblValor" runat="server"></asp:Label></td>
        
</tr>
   
</table>
</div>
</form>

Veja o código implementado para testar as funcionalidades no Webform:

protected void Page_Load(object sender, EventArgs e)
{

    // Serializando
    Produto produto = new Produto(1, "Produto 1", 15);    TextBox1.Text =

    Serializador.Serializar(produto);

    // Deserializando
    produto = (Produto)Serializador.Deserializar(TextBox1.Text, typeof(Produto));

    lblId.Text = produto.Id.ToString();
    lblNome.Text = produto.Nome;
    lblValor.Text = produto.Valor.ToString();

}

Executando o projeto veremos o seguinte resultado:


Resultado da execução do webform de teste de serialização e deserialização

Viram com é possível serializar e deserializar objetos utilizando de muito pouco esforço o .NET framework?

Até a próxima e bons códigos!

5.0 ponto(s). Avaliado por 2 pessoas

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

Tags: ,

ASP.NET | .NET Framework

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.