2009-09-29 300 views
1

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

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

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

回答

1

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

一旦你知道你是你需要的地方,你可以Response.Redirect到同一页面,他们将会消失。

4

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

+0

它从外部服务器返回,它遇到了我的page2.aspx,URL是localhost/page2.aspx?results = data。所以我没有控制它是如何击中第2页的,我只是想将地址栏中的信息隐藏起来 – Jared 2009-09-29 17:16:43

+0

然后我同意瑞克的说法,重定向就是要走到这里的路。 – RedFilter 2009-09-29 17:41:03

2

一段时间回来我做了一些HTTP编码加密/解密用于此目的的方法。有时在asp.net中,您需要使用查询字符串,但您还需要最终用户不知道该值。我所做的是base 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; 
    } 
+0

谢谢马特布里格斯resoultion ..我一直在寻找这个解决方案相当一段时间,并在这里找到它。奇迹般有效 。非常感谢 :) – 2010-02-23 17:26:58

0

的方式它保留查询字符串和表单变量(任选地)。它不显示在用户Web浏览器中重定向请求的真实URL。 Server.Transfer在浏览器不知道任何事情的情况下发生。浏览器请求页面,但服务器返回另一页面的内容。

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