【问题标题】:Validation for inviting members to join website邀请会员加入网站的验证
【发布时间】:2012-05-17 05:32:09
【问题描述】:

我的网页网址如下:

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 中邀请的验证逻辑是否正确,或者无论是否回发,我都应该这样做吗?

【问题讨论】:

    标签: c# asp.net c#-4.0 asp.net-4.0 webforms


    【解决方案1】:

    嗯,你在哪里保存invitationID 吗?如果你将它保存在 db 中,它可能会有所帮助,这样你就会知道这个 invitationID 已经被使用了,方法是将它标记为在 db 中使用。这样您就可以验证双重注册。

    我使用过这种邀请注册,我向 url 链接发送一封电子邮件,然后单击该链接我进行验证。在发送链接之前,我会生成一个唯一的字符串并将其保存在关于该用户的数据库中。

    【讨论】:

    • 是的,我正在保存邀请 ID,并在用户成功注册后将其删除。但问题不在于。问题是当用户按下后退按钮并再次看到该页面时。由于它是来自浏览器的缓存版本,他仍然可以看到该页面并按下提交按钮。我不会在提交按钮的点击中验证它是否是有效的邀请 ID。我在 Page_Load 中的 !IsPostback 中执行此操作,因为如果页面无效,则向用户显示页面是没有意义的。我必须在两个地方都这样做吗?即 Page_Load 的 if (!isPostback) 以及 submitbutton_click?
    • 我猜您不应该删除该邀请ID,而是应该将其标记为已使用,并且您应该在!PostBack 上验证是否使用了此invitationID
    【解决方案2】:

    是“http://www.ab.com/test.aspx”注册页面吗?如果是,则不得对缓存进行任何移动。因为对于注册用户 - RegistrationPage 必须自动重定向到 HomePage。您必须仅在 RegistrationProcedure 中检查 InvitationId:

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

    是的,正如 FosterZ 所说 - 您必须将 InvitationId 与数据库中的用户帐户相关联。

    【讨论】:

      猜你喜欢
      • 2012-12-29
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      相关资源
      最近更新 更多