【问题标题】:Preventing Cookie replay attacks in ASP.Net MVC防止 ASP.Net MVC 中的 Cookie 重放攻击
【发布时间】:2010-01-23 04:52:46
【问题描述】:

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

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

所有这些工作真的有必要吗?我可以将我自己的 cookie 值的键值存储滚动到已登录的用户,并确保在用户点击注销按钮时清除它。如果这看起来不安全,有没有办法实现一个最小的成员资格提供程序,以便在不将所有身份验证代码交给它的情况下进行这些检查?

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

【问题讨论】:

    标签: asp.net asp.net-mvc forms-authentication security


    【解决方案1】:

    我可以滚动我自己的键值存储 登录用户的 cookie 值和 只要确保我在 用户点击注销按钮。

    是的,您可以这样做。会员资格提供者保留了关于用户的一小部分数据(用户名、电子邮件、密码、上次登录、丢失的密码问题、丢失的密码答案等)。

    如果您不想改造会员提供商,我会采用您提到的方法。不管信息是写到aspnet_Users表的comment字段还是你自己表的位字段,都应该没什么区别。

    您可能还需要考虑在您的会员资格/身份验证代码中添加一个接口。然后,您可以在更方便的时候将当前代码交换为 Membership Provider 实现。

    【讨论】:

      【解决方案2】:

      我发现 MembershipProvider 很有帮助。它允许我作为开发人员对本地用户数据库使用 SQLMembershipProvider,然后当我将其移至生产环境时,只需使用 ActiveDirectoryMembershipProvider 并且我不必更改一行代码(在我的 web.config 中除外文件)。

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

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

      ...有没有一种方法可以实现最小的成员资格提供程序,以便在不将所有身份验证代码交给它的情况下进行这些检查?

      MP 是最好让它做它最擅长的事情的时候之一。如果您尝试在此处仅使用其中的一部分,而在此处尝试使用其中的一部分,则可能会在以后引起一些麻烦。它知道它应该做什么,并且在可能的情况下规避它需要额外的工作,而这些工作可能被证明是不必要的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多