2012-05-17 31 views
0

我有我的網頁的網址,如:驗證邀請成員加入網站

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的邀請驗證邏輯是否正確,或者我應該這樣做,無論它是否回發?

回答

0

那麼,你在保存invitationID一些地方?如果將它保存在db中,它可能會有好處,所以您會通過將其標記爲在db中使用來了解此invitationID已被使用。這樣你可以驗證雙重註冊。

我已經使用這種邀請註冊,我發送URL鏈接電子郵件,然後單擊該鏈接我做驗證。在發送鏈接之前,我生成一個唯一的字符串並將其保存在相對於該用戶的數據庫中。

+0

是的,我正在保存invitationID,並在用戶成功註冊後刪除它。但問題不在於此。問題出在用戶按下後退按鈕時他又看到了頁面。由於它是從瀏覽器緩存的版本,他仍然可以看到該頁面並按提交按鈕。我不會驗證它是否有效的邀請ID或不在提交按鈕的點擊。我這樣做!IsPostback在Page_Load中,因爲如果頁面無效,那麼顯示頁面並不重要。我必須在兩個地方都做嗎?即Page_Load的if(!isPostback)和submitbutton_click? – Jack

+0

我想你不應該刪除該邀請ID,而應該將其標記爲已使用,並且您應該在'!PostBack'上進行驗證,確定該邀請ID是否被使用 – FosterZ

0

是「http://www.ab.com/test.aspx」RegistrationPage?如果是的話,你不能對緩存做任何動作。因爲註冊用戶 - RegistrationPage automaticaly必須重定向到HomePage。您必須檢查InvitationId裏面只有RegistrationProcedure:

Regsister(..., Request.QueryString["invitationID"]); 

的是,作爲FosterZ說 - 你必須有InvitationId與數據庫中的用戶賬戶鏈接。