2009-09-29 302 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"); 
}