1

我在my ASP.NET 2.0網站中使用表單身份驗證。今天在測試期間,我遇到了重大問題。表單身份驗證中的問題

認證後,我有默認頁面createuser.aspx。從那個頁面我創建新的用戶。它工作正常。

有註銷按鈕,我在其中清除所有會話並將其重定向到登錄頁面。一切工作正常。

在測試過程中,我使用fiddler在其中拖放fiddler的請求生成器選項中的createuser.aspx url,並在更改了fiddleder中的文本框值後,單擊執行。 我很震驚的信息保存在數據庫中。

這意味着我錯過了一些重要的事情在asp.net表單身份驗證,因爲註銷後所有的sesission/cookie應該過期,小提琴手不應該工作。

我希望你們都明白我的問題。請幫我找出解決方案。我對認證cookie有懷疑。我不知道我是否正確?

+0

你可以顯示你的註銷代碼.... – 2009-07-09 14:40:54

+0

嗨,你是什麼意思「我震驚的信息保存在數據庫中」 - 是不是創建用戶頁面應該做什麼?您的意思是創建用戶屏幕只應由經過身份驗證的用戶調用?我假設你在未登錄的情況下無法在瀏覽器中訪問此頁面? 你可以發佈來自Fiddler的請求和響應頭? – 2009-07-09 15:32:19

回答

1

註銷您的網絡應用程序將清除您的Cookie,是的。

然而,在提琴手拖動以前請求,並放棄它的請求生成器將複製身份驗證cookie

這意味着,當你執行在提琴手的要求,你要發送的身份驗證cookie,它正在重新vaildated,因此在CreateUser.aspx確實會火的動作,而新用戶詳細信息將被保存在數據庫中。

如果在Fiddler的Request Headers部分中,您將刪除開始.ASPXAUTH =的一部分,直到包括下一個;並且也可能是ASP.NET_SessionId值,你會發現它按照你的預期工作。

如果您想確保這種行爲不可行,您可能還需要存儲某種「登錄此會話」標誌,並清除登錄,並檢查在執行插入操作之前,CreateUser(或者某些基類,如果您在多個頁面上需要此行爲)的代碼隱藏中的值。


編輯迴應評論:

幾件事情會幫助你,那麼:

  1. 將在SSL網站的這個區域 - 因此這將是一個很大更難有人攔截流量 - 但並非不可能,事實上小提琴手可以執行中間人攻擊,並向客戶端提供自己生成的證書,以允許其解密信息。

  2. 正如我上面所說的,你可能想要檢查兩個用戶是否通過身份驗證(來自cookie)並設置了一些會話值 - 當你清理會話時,這將不再存在當用戶通過cookie重新驗證時。

ASP.NET 應該重新驗證cookie的,因爲這是驗證如何跨越會話超時和應用程序重新啓動 - 將刪除該應用程序無法知道從提琴手的請求是否是的方式,所有的會話數據會話只是被殺死,或者是在最後一次重啓之前超時或創建的。


到的意見進一步的迴應:

由於Blowdart正確地指出,會話和身份驗證cookie是沒有關係的,並且服務器不保留它的任何地方發出的所有身份驗證Cookie的列表。因此,服務器在表單身份驗證超時時間內發出的cookie與在超時後發出的cookie之間沒有任何區別 - 如果用戶重新創建該cookie值,則它是有效的cookie。此支持文章對餅乾/票務組合更多資料:

Understanding the Forms Authentication Ticket and Cookie

窗體身份驗證cookie是什麼,但窗體身份驗證票證的容器。該票證作爲表單身份驗證Cookie的值與每個請求一起傳遞,並由服務器上的表單身份驗證用於標識經過身份驗證的用戶。

正如我前面所說的,如果在cookie中的身份驗證票證沒有被服務器所接受,以及有關用戶沒有其他的信息,然後永久性Cookie是行不通的,而不管用戶多久選擇「下次記住我」時,服務器不會記住它們,這就是爲什麼我建議您不要只依賴身份驗證狀態,而且還要在會話中使用某些值(對於Fiddler請求註銷後因爲服務器將銷燬該信息)。