Issue with Base64-encoded parameter in query string

22,814

Solution 1

You should URL encode the confirm parameter. The error you get is because of the last == fragment.

For this use HttpServerUtility.UrlEncode or similar framework methods.

Solution 2

I was using HttpUtility.UrlEncode but I had problems if the base64 encoded string contained a "+" sign. It was correctly being encoded to "%2b" but when it was coming back from the browser it was interpreted as a space. So, I used two simple encode/decode methods instead:

public static string UrlEncodeBase64(string base64Input)
{
    return base64Input.Replace('+', '.').Replace('/', '_').Replace('=', '-');
}

public static string UrlDecodeBase64(string encodedBase64Input)
{
    return encodedBase64Input.Replace('.', '+').Replace('_', '/').Replace('-', '=');
}

Solution 3

You can send your value by replacing two char + to _ and / to -:

string confirm=confirm.Replace('+', '_').Replace('/', '+');

<a target="_blank" href="http://localhost:2817/ConfirmRegistration?confirm=@confirm">
http://localhost:2817/ConfirmRegistration?confirm=@confirm
</a>

and you can get your data in server side by using:

if (Request.QueryString["confirm"] != null && Request.QueryString["confirm"].ToString() != "")
{
       string confirm = HttpUtility.HtmlDecode(Request.QueryString["confirm"]).Replace('_', '+').Replace('-', '/');
}

Solution 4

You should probably URL encode the parameter value since = is itself used to separate a parameter name from a parameter value.

Share:
22,814
Ricardo Sampaio
Author by

Ricardo Sampaio

My projects on github: https://github.com/Mds92

Updated on September 30, 2020

Comments

  • Ricardo Sampaio
    Ricardo Sampaio over 3 years

    I'm sending a link in my web application to users mails (for confirming user registration) as the following :

    <a target="_blank" href="http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA==">
    http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA==
    </a>
    

    But Chrome alert this message :

    Chrome Message

    Is the query string invalid ? How can I resolve it ?

    BTW:
    My application is in C# and MVC3