1

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

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

有注销按钮,我在其中清除所有会话并将其重定向到登录页面。一切工作正常。

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

这意味着我错过了一些重要的事情在asp.net表单身份验证,因为注销后所有的sesission/cookie应该过期,小提琴手不应该工作。

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

+0

你可以显示你的注销代码.... – 2009-07-09 14:40:54

+0

嗨,你是什么意思“我震惊的信息保存在数据库中” - 是不是创建用户页面应该做什么?您的意思是创建用户屏幕只应由经过身份验证的用户调用?我假设你在未登录的情况下无法在浏览器中访问此页面? 你可以发布来自Fiddler的请求和响应头? – 2009-07-09 15:32:19

回答

1

注销您的网络应用程序将清除您的Cookie,是的。

然而,在提琴手拖动以前请求,并放弃它的请求生成器将复制身份验证cookie

这意味着,当你执行在提琴手的要求,你要发送的身份验证cookie,它正在重新vaildated,因此在CreateUser.aspx确实会火的动作,而新用户详细信息将被保存在数据库中。

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

如果您想确保这种行为不可行,您可能还需要存储某种“登录此会话”标志,并清除登录,并检查在执行插入操作之前,CreateUser(或者某些基类,如果您在多个页面上需要此行为)的代码隐藏中的值。


编辑回应评论:

几件事情会帮助你,那么:

  1. 将在SSL网站的这个区域 - 因此这将是一个很大更难有人拦截流量 - 但并非不可能,事实上小提琴手可以执行中间人攻击,并向客户端提供自己生成的证书,以允许其解密信息。

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

ASP.NET 应该重新验证cookie的,因为这是验证如何跨越会话超时和应用程序重新启动 - 将删除该应用程序无法知道从提琴手的请求是否是的方式,所有的会话数据会话只是被杀死,或者是在最后一次重启之前超时或创建的。


到的意见进一步的回应:

由于Blowdart正确地指出,会话和身份验证cookie是没有关系的,并且服务器不保留它的任何地方发出的所有身份验证Cookie的列表。因此,服务器在表单身份验证超时时间内发出的cookie与在超时后发出的cookie之间没有任何区别 - 如果用户重新创建该cookie值,则它是有效的cookie。此支持文章对饼干/票务组合更多资料:

Understanding the Forms Authentication Ticket and Cookie

窗体身份验证cookie是什么,但窗体身份验证票证的容器。该票证作为表单身份验证Cookie的值与每个请求一起传递,并由服务器上的表单身份验证用于标识经过身份验证的用户。

正如我前面所说的,如果在cookie中的身份验证票证没有被服务器所接受,以及有关用户没有其他的信息,然后永久性Cookie是行不通的,而不管用户多久选择“下次记住我”时,服务器不会记住它们,这就是为什么我建议您不要只依赖身份验证状态,而且还要在会话中使用某些值(对于Fiddler请求注销后因为服务器将销毁该信息)。