ASP.NET:隐藏在URL查询字符串(ASP.NET : Hide Querystring in

2019-07-20 02:20发布

我不知道如果我只是过于乐观,但有没有办法隐藏在URL中返回的查询字符串?

我在这个场景是在那里我有page1.aspx这个通过后重定向命令到外部服务器,并返回它page2.aspx。 我有这个唯一的问题是,返回变量的查询字符串的URL仍然离开了。

我只是想掩盖从普通用户的丑串/信息。 那么,有没有编辑和重新加载,在页面加载方法还是我只需要保存一个中间人页面上的变量,然后打2页的方式。

Answer 1:

我不喜欢这种方法,但它会奏效。

一旦你知道你在哪里,你需要是可以的Response.Redirect到相同的页面,他们将不复存在。



Answer 2:

什么是这些查询字符串变量的由来? 您不能提交的所有数据作为POST数据,因此没有查询字符串?



Answer 3:

你可能也使用

Context.RewritePath("/foo.aspx")

这里有一个ScottGu博客文章URL重写的链接。

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx



Answer 4:

一段时间回来我做了一些HTTP编码加密/解密用于此目的的方法。 有时在asp.net你需要使用的查询字符串,但你还需要最终用户不知道的价值。 我要做的就是基地64编码,加密值,基于哈希我的私有密钥值,并用粘在一起,他们 - 。 在另一边我检查左侧哈希来验证真伪,并解密右侧。 一个非常好的小问题,就是+(这是一个有效的base64字符串值)等于在HTML编码空间,所以我考虑到这一点的解密。

我用这种方法就是加密值添加到查询字符串,然后将其解密的另一边

    private const string KEY = "<random value goes here>";

    public static string EncryptAndHash(this string value)
    {
        MACTripleDES des = new MACTripleDES();
        MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
        des.Key = md5.ComputeHash(Encoding.UTF8.GetBytes(KEY));
        string encrypted = Convert.ToBase64String(des.ComputeHash(Encoding.UTF8.GetBytes(value))) + '-' + Convert.ToBase64String(Encoding.UTF8.GetBytes(value));

        return HttpUtility.UrlEncode(encrypted);
    }

    /// <summary>
    /// Returns null if string has been modified since encryption
    /// </summary>
    /// <param name="encoded"></param>
    /// <returns></returns>
    public static string DecryptWithHash(this string encoded)
    {
        MACTripleDES des = new MACTripleDES();
        MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
        des.Key = md5.ComputeHash(Encoding.UTF8.GetBytes(KEY));

        string decoded = HttpUtility.UrlDecode(encoded);
        // in the act of url encoding and decoding, plus (valid base64 value) gets replaced with space (invalid base64 value). this reverses that.
        decoded = decoded.Replace(" ", "+");
        string value = Encoding.UTF8.GetString(Convert.FromBase64String(decoded.Split('-')[1]));
        string savedHash = Encoding.UTF8.GetString(Convert.FromBase64String(decoded.Split('-')[0]));
        string calculatedHash = Encoding.UTF8.GetString(des.ComputeHash(Encoding.UTF8.GetBytes(value)));

        if (savedHash != calculatedHash) return null;

        return value;
    }


Answer 5:

它保留查询字符串和表单变量(可选)。 它不显示它在重定向用户的网络浏览器的请求真实的URL。 Server.Transfer发生没有浏览器一无所知。 浏览器请求一个页面,但服务器返回的另一个内容。

protected void btnServer_Click(object sender, EventArgs e)
{
    Server.Transfer("~/About.aspx?UserId=2");
}


文章来源: ASP.NET : Hide Querystring in URL