防止ASP.Net MVC中的Cookie重放攻击

时间:2010-01-22 14:38:45

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

  

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

MP是其中最好的时刻之一,让它做最好的事情。如果你试图在这里使用它的一部分,并在那里使用它的一部分,尽管可能,将导致一些令人头疼的事情。它知道它应该做什么并绕过它,尽管可能,需要额外的工作,这可能是不必要的。

答案 1 :(得分:1)

  

我可以滚动自己的键值存储   用户登录的cookie值和   只要确保我清楚这一点   用户点击退出按钮。

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

如果您不想改造会员提供者,我会采取您提到的方法。无论信息是写入aspnet_Users表的注释字段还是写入自己表中的位字段,都不应该有任何区别。

您还可以考虑将接口设置为您的会员/身份验证代码。然后,您可以在更方便时将当前代码交换到成员资格提供程序实现。