2009-10-26 103 views
1

有沒有可靠的方法來確定用戶來自ASP.NET應用程序的位置?我們有一個連接到兩個不同位置的Web應用程序。這兩個鏈接位於不同的域中,他們需要在此應用程序中指定某些用戶權限。這是我迄今爲止嘗試過...如何判斷用戶來自哪裏?

  • 使用Request.UrlReferrer(這是Referer HTTP標頭)。這總是返回一個空字符串。我相信這是因爲超鏈接使用Javascript來啓動一個彈出窗口。基於我的研究,用戶代理在標準超鏈接上提供了這個HTTP標頭。 Javascript彈出窗口是一個不同的故事(顯然)。

  • 一個簡單的查詢字符串來指示引用。這不是一個真正的選擇,因爲我們需要一些不容易繞過的東西(更安全)。

任何想法?我明白,在事物的宏偉計劃中,這可能會有更好的總體設計/結構。請不要發表建議我重新設計一切的答案,因爲這不是一種選擇。

+0

什麼是您的網絡服務器設置?認證的類型?匿名訪問等? – davek 2009-10-26 21:04:39

回答

5

沒有一種可靠的方法可以告訴用戶來自哪裏,這不僅是ASP.NET的限制,而且也是一般的所有Web應用程序。 URL引用者很容易被欺騙,所以它不可靠。我認爲最好的選擇可能是一些加密的url參數,或者如果您願意,可以使用cookie。

因此,兩個頁面應該就共同的私鑰達成一致。

  1. 第1頁將使用密鑰來加密其地址並把它傳遞到第2頁
  2. 第二頁會檢查該參數的存在,並嘗試與用於加密
  3. 如果相同的私鑰進行解密這意味着Page2將能夠確定是誰調用它,如果不是,數據已被篡改
+0

這看起來像是最後一根稻草。開始的時間!謝謝你的幫助。 – 2009-10-30 15:36:37

1

沒有瀏覽器傳遞引用鏈接或使用您描述的查詢字符串,無法知道。

+0

我很害怕那個...... – 2009-10-26 21:16:26

0

另一種選擇是在ASP.NET應用程序上有兩個不同的登錄頁面。登陸頁面可以設置安全選項,然後重定向到通用主頁。這比querystring選項更安全一些。

或者,您可以在從ASP.NET應用程序站點提取的引用網站上放置1x1像素的圖像。引用者應該被傳遞給腳本,然後你可以在用戶機器上設置一個cookie,然後你可以在它們進入應用主頁時引用它。