代码之家  ›  专栏  ›  技术社区  ›  Jack Ryan

防止ASP.NET MVC中的cookie重播攻击

  •  4
  • Jack Ryan  · 技术社区  · 16 年前

    我的任务是实现本文中的第4点: http://support.microsoft.com/kb/900111

    这涉及使用成员资格提供程序在用户登录和注销时向服务器端记录添加注释,然后确认当使用cookie进行身份验证时,用户尚未注销。这对我来说很有意义。这开始分崩离析的地方是,我们目前不使用成员资格提供程序,因此我似乎面临着重新实现所有身份验证代码以使用成员资格提供程序的问题。我们当前在控制器中检查身份验证,并调用 FormsAuthentication.SetAuthCookie() 一旦我们知道用户存在。强制一个会员制提供商加入将是一项很大的工作。

    所有这些工作真的有必要吗?我可以把我自己的cookie值的键值存储区滚动到登录用户,并确保当用户点击注销按钮时清除此项。如果这看起来不安全,是否有一种实现最小成员资格提供程序的方法,以便在不向其传递所有身份验证代码的情况下进行这些检查?

    我想我这里的主要问题是,我们很久以前就决定了成员资格提供者模型不适合我们用于锁定和解锁帐户的模型,并选择不使用它。现在,我们发现MS建议特别提到了一个成员资格提供者,由于这是安全性,我需要确保不按照他们的建议使用它不会引起麻烦。

    2 回复  |  直到 16 年前
        1
  •  1
  •   37Stars    16 年前

    我能开自己的钥匙价值商店吗 登录用户的cookie值和 只要确保我在 用户点击注销按钮。

    是的,你可以这样做。成员资格提供程序保留一组关于用户的数据(用户名、电子邮件、密码、上次登录、密码丢失问题、密码丢失答案等)。

    如果您不想重新适应会员制提供商,我将采用您提到的方法。无论信息是写入aspnet_用户表的注释字段,还是写入您自己表中的位字段,都不会有任何区别。

    您可能还需要考虑将一个接口放入您的成员身份/身份验证代码中。然后,您可以在更方便的时候将当前代码交换到成员资格提供程序实现。

        2
  •  1
  •   Nick DeVore    16 年前

    我发现会员资格提供商非常有帮助。它允许我作为开发人员对本地用户数据库使用sqlmembershipprovider,然后当我将其移动到生产环境时,只需使用ActiveDirectorymembershipprovider,而不必更改代码行(web.config文件除外)。

    使用它们的CustomMembershipProvider,您可以重载任何身份验证方法,并在这些方法中执行您想要的任何其他检查。

    如果你决定加入会员制提供商计划,我认为你不会后悔的。短期内可能会很痛苦,但从长远来看,我想你会看到回报的。既然您已经在控制器中编写了很多身份验证代码,那么将其融入到MembershipProvider使用它的方式中可能就不那么困难了?

    …是否有一种实现最小成员资格提供程序的方法,以便在不向其传递所有身份验证代码的情况下进行这些检查?

    国会议员正是让它做最好的事情的时候之一。如果你试着只在这里使用一部分,在那里使用一部分,如果可能的话,会在路上引起一些头痛。它知道它应该做什么,并且尽可能避开它,这将需要额外的工作,而这些工作最终可能是不必要的。