2012-01-13 50 views
0

不工作我有這個下面的代碼:Request.UrlReferrer在IE7

if (Request.UrlReferrer != null) 
     { 
      if (Request.UrlReferrer.PathAndQuery.ToLowerInvariant() == "/test/content.htm") 
      { 
       postbacklink = Request.UrlReferrer.AbsoluteUri.Replace("/TEST/Content.htm", "/Testing.aspx?") + Request.QueryString; 
      } 
      else 
      { 
       postbacklink = Request.UrlReferrer.AbsoluteUri; 
      } 
     } 
     ExtendedLoanView.PostbackLink = postbacklink; 

現在這個頁面可以通過兩個不同的地點進行訪問。這意味着此代碼:

postbacklink = Request.UrlReferrer.AbsoluteUri.Replace("/TEST/Content.htm", "/Test.aspx?") + Request.QueryString; 

只能使用一個頁面(Test.aspx)並且是硬編碼的。所以在IE7 Request.UrlReferrer顯示我:

Request.UrlReferrer = {http://Testing:12345/PPP/Content.htm} 

而在IE8 +我得到這個值:

Request.UrlReferrer = {http://Testing:12345/PPP/TestingPage.aspx?Name=Xyz&Address=123 YYY 

我應該如何解決這個問題?它在過去一個月裏一直在竊聽我。

+0

您發佈的代碼和您描述的問題確實不一定相關。什麼是'postbacklink'用於?它的URL是硬編碼的,它與IE7有什麼區別,告訴你引用者有什麼不同?這似乎不......可能。 – 2012-01-15 21:35:55

+0

postbacklink只是一個'var'變量。沒什麼! IE7給我content.htm,從這我看不出哪個頁面應該顯示給用戶。例如,如果你在Test.aspx上並點擊一個按鈕,那麼從Request.UrlReferrer中檢查我應該向你顯示哪個頁面:Test1.aspx或Test2.aspx – 2012-01-17 14:23:28

回答

1

我肯定會建議不要根據您的請求信息(不是用戶輸入的值)以上的邏輯。問題是它跨瀏覽器是不同的,它是真的可以hackable。

如果您仍然需要將信息從客戶端傳遞到服務器,請確保具有經過驗證的信息。如果你需要保持同步並且有有效的信息,不要依賴瀏覽器給你的東西,而要自己設置它,然後在你設置的請求中從一個地方取得它(例如,隱藏的輸入,控件,視圖狀態的變量,或任何可以使用的技術)。

大多數網站通過將URL中的目標網址傳遞給查詢參數來處理您嘗試解決的情況。例如:

http://www.example.com/Login.aspx?returnUrl=/TEST/content.htm

編輯:我也知道你發送給客戶端一切都非常容易被破解,無論如何,但如果你自己設置的,它更容易讓你驗證,它一直沒有篡改。一個示例是ViewState驗證方法。

+0

所以你建議ViewState是要走的路對於?就像我可以創建ViewState並在其他頁面上查看它來自哪個頁面。或者我可以創建隱藏的表單輸入... – 2012-01-17 14:21:36

+0

@Raj我不完全知道你的必需品,但根據他們,你可以使用'PreviousPage'並基於你自己的類類型(http://msdn.microsoft .com/en-us/library/ms178139.aspx),或者使用該前一頁中的ViewState,或者如上所述使用隱藏輸入。 如果只是知道它來自哪個頁面,並且它們總是回發,那麼我會使用'PreviousPage'。 – Alpha 2012-01-17 14:46:16

+0

謝謝你!我會嘗試PreviousPage,並會在IE7瀏覽器中測試它,否則我會去隱藏輸入路徑。 – 2012-01-17 16:03:23