Conceito
Strings encodadas com base64 permitem que você trabalhe com fluxos de ida e vinda de dados de uma forma segura, evitando que por exemplo caracteres reservados ao HTML (como & e ?) sejam enviados durante as requisições
Criando as funções
Adicione em uma classe de gerenciamento interna (geralmente um Helper) os métodos a seguir para ter efetivamente um controle mais direto de base64 com as operações de encode/decode e checagem.
Atenção para o fato de que você deverá referenciar as namespaces System.Text e System.Convert em sua classe.
Para codificar
public static string EncodeBase64(string value)
{
var keyBytes = Encoding.UTF8.GetBytes(value);
return Convert.ToBase64String(keyBytes);
}
Para decodificar
public static string DecodeBase64(string value)
{
var base64EncodedBytes = System.Convert.FromBase64String(value);
return Encoding.UTF8.GetString(base64EncodedBytes);
}
E finalmente, para verificar se a string é de fato um base64 válido
public static bool IsBase64(string value)
{
Span<byte> buffer = new Span<byte>(new byte[value.Length]);
return Convert.TryFromBase64String(value, buffer, out int _);
}
Usando
Para utilizar basta chamar as funções, um exemplo no meu caso:
return Redirect("/usuario/login?redir=" + StringHelper.EncodeBase64("/arquivo/novo"));
Após ter codificado uma url de forma segura, na controller simplesmente usei:
if (string.IsNullOrEmpty(model.Redir) || !StringHelper.IsBase64(model.Redir))
{
return Redirect("/home");
}
else
{
model.Redir = StringHelper.DecodeBase64(model.Redir);
if (Uri.IsWellFormedUriString(model.Redir, UriKind.RelativeOrAbsolute))
{
return Redirect(model.Redir);
}
}
Top comments (0)