我的页面网址如下:
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 :(得分:0)
嗯,你在某处保存invitationID
吗?如果你在db中保存它可能会有好处,这样你就可以通过将它标记为在db中使用来了解这个invitationID
已经被使用了。这样您就可以验证双重注册。
我使用过这种邀请注册,我发送url链接一封电子邮件然后点击该链接我做验证。在发送链接之前,我生成一个唯一的字符串,并将其保存在db中,与该用户相关。
答案 1 :(得分:0)
是“http://www.ab.com/test.aspx”注册页面?如果是,则不得对缓存执行任何移动。因为对于注册用户 - RegistrationPage automaticaly必须重定向到HomePage。您必须仅在RegistrationProcedure中检查InvitationId:
Regsister(..., Request.QueryString["invitationID"]);
是的,正如FosterZ所说 - 你必须将InvitationId与用户在数据库中的帐户相关联。