我有我的網頁的網址,如:驗證邀請成員加入網站
http://www.ab.com/test.aspx?invitationID=XXXX
我在Page_Load中檢查邀請是否真的有效:
if(!IsPostback)
{
//login for validation. If not valid invitationID do a server.Transfer to 404 page
}
這種運作良好。但是,一旦用戶點擊註冊頁面上的提交按鈕。他被重定向到RegistrationSuccessful頁面。它運行良好,直到這裏。但是現在,如果他由於緩存而按下瀏覽器的後退按鈕,他又會看到該頁面,並且他可以再次註冊。這是一個錯誤。
我做了補充:
HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();
在我的Page_Load中,它似乎很好地工作。但是,你們看到這種方法存在安全威脅嗎? !IsPostback
的邀請驗證邏輯是否正確,或者我應該這樣做,無論它是否回發?
是的,我正在保存invitationID,並在用戶成功註冊後刪除它。但問題不在於此。問題出在用戶按下後退按鈕時他又看到了頁面。由於它是從瀏覽器緩存的版本,他仍然可以看到該頁面並按提交按鈕。我不會驗證它是否有效的邀請ID或不在提交按鈕的點擊。我這樣做!IsPostback在Page_Load中,因爲如果頁面無效,那麼顯示頁面並不重要。我必須在兩個地方都做嗎?即Page_Load的if(!isPostback)和submitbutton_click? – Jack
我想你不應該刪除該邀請ID,而應該將其標記爲已使用,並且您應該在'!PostBack'上進行驗證,確定該邀請ID是否被使用 – FosterZ