2013-01-14 57 views
0

這是我之前發佈的問題的後續內容,但尚不清楚。我希望我現在可以更清楚。使用會話ID在安全網頁上驗證用戶

我使用ASP.NET和C#在所有安全頁面上登錄後驗證用戶。我應該能夠做到這一點,而無需觸摸web.config文件,所以請避免任何涉及編輯web.config文件的解決方案。經過一些調試後,我發現用戶登錄後,其他人可以從另一臺計算機訪問安全頁面(無需登錄),也可以在同一臺計算機上訪問,但使用其他瀏覽器。這顯然是不好的,所以我想知道如何使用有效用戶的初始會話ID來保護其他具有直接頁面路徑但不是有效登錄的用戶的所有後續page_load。

目前,我在所有安全page_load函數中做的唯一檢查是檢查是否有MySession.GetSessionId()==null。我怎樣才能使用GetSessionId()返回的這個值來檢查初始會話ID值在登錄時的值?

+3

使用ASP.Net成員資格和角色。 http://msdn.microsoft.com/en-us/library/yh26yfzy%28v=vs.100%29.aspx。它爲你做到了這一點。他們如何登錄?你如何存儲密碼?你如何處理角色?如果您嘗試構建自己的身份驗證系統以避免編輯web.config,那麼您可能會遇到比此更多的問題。 – MikeSmithDev

回答

2

只依靠sessionID不是要走的路!您只需檢查sessionID即可獲得用戶的任何信息。

將登錄用戶的用戶ID存儲在會話中。 然後檢查安全頁面是否有有效的用戶ID。

不是最優雅的解決方案,但這種方式不需要更改爲web.config。

但我懷疑網站中的認證/授權邏輯沒有充分利用隨asp.net一起發佈的成員資格功能。

也許你可以通過指出這一點得到一些觀點,提供一個長期穩定的解決方案。

+0

+1指出。手動檢查會話對象確實會長期失敗。 –

3

會話對於每個用戶和每個用戶代理已經是唯一的。如果多個用戶都在訪問同一個會話,那麼會話創建和設置邏輯中肯定存在一個錯誤,可能在用戶標識設置的位置。我的心理調試告訴我,要麼:

  • 所有用戶和憑證從某種偶然的持久性存儲設置爲相同的值,或
  • 你是存儲在一個static領域的會話的引用某個地方的價值被所有用戶共享

但是,沒有顯示代碼就很難調試。

+0

我很欣賞這些有用的建議,但這並不能回答我問到的問題,或者至少是我的問題。來自每個實例的會話ID是不同的,但他們仍然大聲登錄。我相信我有解決方案,如果調試結束,我將很快在這裏發佈。 – Nibirue

0

快速&骯髒的解決方案。檢查僞代碼

在登錄頁面(爲Login.aspx)

BtnLogin_click() 
{ 
     // Query database to check username/password match 
     // If Success store corresponding UserID in session 
     Session["userID"]=YourDbValue; // Say 1 is for administrator, 2 is for user 
} 

安全網頁上(Secure.aspx)

PageLoad(){ 
     if (Session["userID"]!="1") 
      // Log this attempt somewhere 
      Response.Redirect("~/NotAuthorized.aspx"); 
    } 

我強烈建議你去反對這種做法&實現適當的會員系統,因爲您必須在每個頁面的每個&中對此進行硬編碼,否則如果未來將許多管理員角色添加到網站中,您仍然遇到麻煩。

達米安。

+0

我同意,但我正在做我被要求做逐字記錄(我正在接受我的工作培訓)。謝謝您的幫助。 – Nibirue

+0

如果您的數據庫中有角色表,您還可以存儲管理員的角色ID。 –

相關問題