表单身份验证中的问题

时间:2009-07-09 13:46:16

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

我在ASP.NET 2.0网站上使用表单身份验证。今天在测试期间我遇到了重大问题。

验证后,我有默认页面createuser.aspx。从那个页面我正在创建新用户。它工作正常。

有注销按钮,我在其中清除所有会话并在登录页面中重定向它。一切都很好。

在测试期间,我使用了fiddler,我在fiddler的请求构建器选项中拖放createuser.aspx url,在fiddler中更改文本框值后,单击执行。 我很震惊,信息保存在数据库中。

这意味着我在asp.net表单身份验证中缺少一些重要的东西,因为在注销后所有sesission / cookie都应该过期而且fiddler不应该工作。

我希望你们都明白我的问题。请帮我找出解决方案。我对身份验证cookie有疑问。我不知道我是否正确?

2 个答案:

答案 0 :(得分:2)

请参阅asp.net网站上的Security Tutorials

答案 1 :(得分:1)

退出网络应用会清除您的Cookie,是的。

但是,在Fiddler中拖动上一个请求并将其放在请求构建器上将复制身份验证Cookie

这意味着当您在Fiddler中执行请求时,您正在发送正在重新调用的auth cookie,因此CreateUser.aspx中的操作确实会触发,并且新的用户详细信息将存储在数据库。

如果在Fiddler的Request Headers部分中,你将删除cookie的一部分.ASPXAUTH =直到并包括下一个;也可能也是ASP.NET_SessionId值,你会发现它按预期工作。

如果你想确保不可能出现这种行为,你可能还想存储某种“Logged In This Session”标志,你也可以在Logout上清除它,然后检查一下在执行插入之前,CreateUser(或某些基类,如果您需要在多个页面上执行此行为)的代码隐藏中的值。


编辑以回复评论:

有几件事可以帮助你:

  1. 将网站的这个区域置于SSL下 - 因此有人拦截流量会更加困难 - 但并非不可能,实际上小提琴手可以执行中间人攻击,并提供客户端使用自生成的证书,允许它解密信息。

  2. 正如我上面所说,你可能想要检查用户是否经过身份验证(来自cookie)以及设置了某个会话值 - 当你正在清理会话时,这将不再是通过cookie重新验证用户时存在。

  3. ASP.NET 应该重新验证cookie,因为身份验证可以跨越会话超时和应用程序重新启动 - 删除所有会话数据,应用程序无法知道来自fiddler的请求是它刚被杀死的会话,或者在上次重启之前超时或创建的会话。


    对评论的进一步回应:

    正如Blowdart正确指出的那样,会话和身份验证cookie不相关,并且服务器不会保留它在任何地方发布的所有身份验证cookie的列表。因此,在表单身份验证超时期间发出的cookie与在已删除的超时内发布的cookie之间的服务器没有区别 - 如果用户重新创建该cookie值,那么它就是一个有效的cookie。此支持文章有关于cookie /票证组合的更多信息:

      

    Understanding the Forms Authentication Ticket and Cookie

         

    表单身份验证cookie只是表单身份验证票证的容器。故障单作为每个请求的表单身份验证cookie的值传递,并由服务器上的表单身份验证使用,以标识经过身份验证的用户。

    正如我之前所说,如果服务器不接受cookie中的身份验证票证,而没有关于该用户的其他信息,那么持久性cookie将无效,无论用户选择多久“记住“我下次”,服务器不会记住它们,这就是为什么我建议您不仅仅依赖于身份验证状态,而且还要依赖会话中的某些值(因为注销后Fiddler请求不存在)服务器将销毁该信息。)