Desenvolvimento - C#
Encriptando valores passados por QueryString
Nem sempre os valores que passamos por QueryString em nossas páginas são controlados da maneira que deveriam. Existem formas de melhorar essa abordagem utilizando encriptação.
por Rodolfo PaoniNem sempre os valores que passamos por QueryString em nossas páginas são controlados da maneira que deveriam. Existem formas de melhorar essa abordagem utilizando encriptação. É interessante utilizar nomes que não definiam claramente o que é passado naquele campo, por exemplo: "p", "p1", "p2", etc. Assim o usuário final não faz noção do que aquele valor representa e com a técnica de encriptação, isso fica ainda menos claro.
Abaixo demonstro uma classe com 2 métodos estáticos para realizar este trabalho:
Lembre-se: Os valores não estão critografados, apenas encriptados. Isso significa que ainda sim não existe total segurança, mas ao menos minimiza-se a vulnerabilidade do sistema com relação à QueryStrings.
Como recuperar e validar os parâmetros encriptados?
Um abraço e bons códigos!
Abaixo demonstro uma classe com 2 métodos estáticos para realizar este trabalho:
public static class EncryptParam { public static string Encrypt(string stringToEncrypt) { try { Byte[] b = System.Text.ASCIIEncoding.UTF8.GetBytes(stringToEncrypt); return Convert.ToBase64String(b); } catch { return string.Empty; } } public static string Decrypt(string stringToDecrypt) { try { Byte[] b = Convert.FromBase64String(stringToDecrypt); return System.Text.ASCIIEncoding.UTF8.GetString(b); } catch { return string.Empty; } } }
Lembre-se: Os valores não estão critografados, apenas encriptados. Isso significa que ainda sim não existe total segurança, mas ao menos minimiza-se a vulnerabilidade do sistema com relação à QueryStrings.
Como recuperar e validar os parâmetros encriptados?
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { // Validando o parâmetro "p" // Parâmetro não informado if (string.IsNullOrEmpty(Request.QueryString["p"])) { ClientScript.RegisterStartupScript(typeof(string), string.Empty, "window.alert(\"Parâmetro não informado.\");history.go(-1);", true); } // Parâmetro Inválido else if (EncryptParam.Decrypt(Request.QueryString["p"].Trim()).Equals(string.Empty)) { ClientScript.RegisterStartupScript(typeof(string), string.Empty, "window.alert(\"Parâmetro inválido.\");history.go(-1);", true); } // Parâmetro válido else { // Decriptando o valor da Url Response.Write(EncryptParam.Decrypt(Request.QueryString["p"].Trim())); } } }
Um abraço e bons códigos!