C#

27 out, 2021

Criptografando parâmetros na Query String URL

Publicidade

Olá pessoal, meu nome é Mauricio Junior e hoje eu vou falar e mostrar como criptografar parâmetros para passar pela URL e o usuário não consegue ver os dados passados pela URL. Um ponto importante aqui é, os desenvolvedores estão passando parâmetros pela URL que podem ser alterados facilmente e o usuário já entende isso, dados que podem ser alterados pela URL e muitos tem usado para invadir ou ver outras contas sem que tenha permissão por exemplo.

O que foi utilizado:

– Editor: Microsoft Visual Studio

– Linguagem C#

– Tipo de projeto: Web

– Framework: .NETCore

– Package: NuGet CriptQuery

Problema

Usar url de forma aberta e qualquer um pode alterar os dados enviados ou acessar dados que não podem ser acessados.

Solução

Utilizar um NuGet Package que criptografa os parâmetros da URL query string e o usuário não consegue alterar os parâmetros. Se forem alterados, os dados serão inválidos e assim você protege os dados.

Vamos ver na prática como utilizar isso usando apenas poucas linhas de código. O pacote NuGet está disponível gratuitamente no site da Microsoft e no meu site mauriciojunior.net/nugets onde você pode fazer download gratuitamente para usar em seus projetos. Esse pacote eu fiz para ajudar os desenvolvedores de software como eu sempre gosto de fazer.

Eu vou para o código agora

O primeiro passo é instalar o pacote no seu projeto, pode ser web ou console sem nenhum problema. Veja a figura 1.

Figura 1 – Instalando NuGet no projeto

Eu abri o NuGet clicando com o botão direito do mouse em cima de Dependences. No browse existe a opção de pesquisar e eu pesquisei por criptquery ou se você colocar meu nome Mauricio Junior já consegue achar todos os pacotes lá.

Agora basta fazer o importe e digitar duas linhas no código. Na página Index.cshtml.cs eu fiz o importe usando *using*, veja o código 1.

LEIA TAMBÉM: Aprendendo a usar o NuGet Package CheckData da Microsoft

Código 1 – Fazendo o importe

using CriptQuery;

No método OnGet eu crei uma instância para colocar os parâmetros que eu preciso e depois fiz um redirect para a página privacy onde eu vou pegar as informações passadas pela URL.

Veja o código 2 mostrando como eu fiz no OnGet método.

Código 2 – OnGet método

public void OnGet()

{

var sec = new SecureQueryString();

sec["emailSitemauriciojunior.net"] = "teste@mail.com";

Response.Redirect($"/Privacy/?id={sec.ToString()}");

}

O primeiro ponto aqui foi gerar uma instância de SecureQueryString() e o segundo ponto foi gerar uma informação qualquer com os valores que eu quiser, nesse caso `sec[“emailSitemauriciojunior”]` com o valor `teste@mail.com`.

Eu posso gerar aqui quantos valores eu quiser e quantos parâmetros eu precisar.

A terceira linha do código foi apenas redirecionar para outra página passando os parâmetros que eu desejo, nesse caso `?id={sec.ToString()}`.

A figura 2 mostra como ficou a url criptografada.

Figura 2 – Passando os dados

Se você fizer junto comigo, que é o que eu indico, verá o tanto que ficou criptografada a informação.

Para pegar a informação e retirar a criptografia, é necessário passar o parâmetro para a nova instância dos dados. Na página Privacy.cshtml.cs e no método OnGet eu fiz algumas verificações para poder pegar os dados e fazer o que eu preciso com eles. Veja o código 3.

LEIA TAMBÉM: Colocando seu site em várias línguas com .NETCore Web Razor e Globalization

Código 3 – Pegando os dados na página Privacy.

public void OnGet()

{

if (string.IsNullOrEmpty(Request.Query["id"]))

Response.Redirect("Index");

var _id = Request.Query["id"];

if (string.IsNullOrEmpty(_id))

Response.Redirect("Index");

var sec = new SecureQueryString(_id);

var email = sec["emailSitemauriciojunior.net"];

Console.WriteLine(email);

}

O primeiro passo foi verificar se algum dado é passado com o nome **id**. Se nada estiver como id, a página será redirecionada para a página inicial chamada Index.

O segundo passo é atribuir o valor a uma variável chamada _id. Se nada tiver dentro dela, também é redirecionado para a página principal.

No terceiro passo eu crio uma instância de SecureQueryString passando o parâmetro _id e depois basta pegar o valor dentro do parâmetro que criei inicialmente na primeira página, o sec[“emailSitemauriciojunior.net”].

Assim eu consigo pegar exatamente o valor sem a criptografia e de forma segura. Você pode ver na figura 3 o resultado na parte final.

Se houver algum problema na decriptografia dos dados ou se o usuário tentar mudar alguma coisa na querystring a criptografia não vai acontecer e volta um erro que pode ser tratado usando try e catch. Assim eu posso tratar o erro e evitar que qualquer dado seja mudado facilmente por um usuário ou pessoa com más intenções.

Espero que tenha gostado e qualquer dúvida pode me encontrar na rede social Instagram @mauriciojunior_net ou pelo meu site www.mauriciojunior.net.