Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 表单身份验证中的问题_Asp.net_Security_Authentication_.net 2.0_Forms Authentication - Fatal编程技术网

Asp.net 表单身份验证中的问题

Asp.net 表单身份验证中的问题,asp.net,security,authentication,.net-2.0,forms-authentication,Asp.net,Security,Authentication,.net 2.0,Forms Authentication,我正在ASP.NET 2.0网站中使用表单身份验证。今天在测试中我遇到了一个大问题 身份验证后,我拥有默认页面createuser.aspx。从那个页面我创建了一个新用户。它运行良好 有一个注销按钮,我在其中清除所有会话并在登录页面中重定向它。一切正常 在测试期间,我使用了fiddler,在其中我将createuser.aspx url拖放到fiddler的请求生成器选项中,在更改了fiddler中的文本框值后,我单击execute。 我对数据库中保存的信息感到震惊 这意味着我在asp.net表

我正在ASP.NET 2.0网站中使用表单身份验证。今天在测试中我遇到了一个大问题

身份验证后,我拥有默认页面createuser.aspx。从那个页面我创建了一个新用户。它运行良好

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

在测试期间,我使用了fiddler,在其中我将createuser.aspx url拖放到fiddler的请求生成器选项中,在更改了fiddler中的文本框值后,我单击execute。 我对数据库中保存的信息感到震惊

这意味着我在asp.net表单身份验证中遗漏了一些重要的内容,因为在注销之后,所有的seission/cookies都将过期,而fiddler将无法工作


我希望你们都理解我的问题。请帮我找出解决办法。我对认证cookies有怀疑。我不知道我是否正确?

请参见asp.net网站。

注销您的web应用程序将清除您的Cookie,是的

但是,在Fiddler中拖动一个上一个请求并将其放到请求生成器上会复制身份验证cookie

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

如果在Fiddler的“请求头”部分中,您删除了cookie的一部分,该部分从.ASPXAUTH=开始,直到并包括下一个;可能还有ASP.NET_SessionId值,您会发现它可以按预期工作

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


编辑以回应评论:

以下几点将对您有所帮助:

  • 将站点的这一区域置于SSL之下——因此拦截流量会困难得多——但并非不可能,事实上,fiddler可以执行中间人攻击,并向客户端提供一个自行生成的证书,使其能够解密信息

  • 正如我上面所说的,您可能希望检查用户是否已通过身份验证(来自cookie)以及是否设置了某些会话值-当您清除会话时,当用户通过cookie重新验证时,这将不再存在

  • ASP.NET应该重新验证cookie,因为这是身份验证跨越会话超时和应用程序重新启动的方式—删除所有会话数据应用程序无法知道来自fiddler的请求是一个刚刚终止的会话,还是一个在上次重新启动之前超时或创建的会话


    对评论的进一步答复:

    正如正确指出的那样,会话和身份验证cookies是不相关的,服务器也没有保存它在任何地方发布的所有身份验证cookies的列表。因此,服务器在窗体身份验证超时内发出的cookie与在此后被删除的超时内发出的cookie之间没有区别-如果用户重新创建该cookie值,则该cookie是有效的cookie。本支持文章提供了有关cookie/ticket组合的更多信息:

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


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

    您能显示您的注销代码吗?…您好,您是什么意思“我对数据库中保存的信息感到震惊”-这不是创建用户页面应该做的吗?您的意思是“创建用户”屏幕只能由经过身份验证的用户调用吗?我假设您未登录时无法在浏览器中访问此页面?你能发布Fiddler的请求和响应标题吗?Ben,我知道Fiddler是一个代理,我们从控件中写入和选择的每个文本都在那里可见。事实上,我们可以在明文中看到密码。因为我们不使用SSL可能是一个原因。从表单注销后,当我们将createuser请求拖动到fiddler中的“requestbuilder”时,它将执行请求,并且我们还可以更改控件值。现在的问题是我从表单中注销,但之后我可以使用fiddler并保存值。哪种情况不应该发生?您对此有何看法?谢谢,先生,实际上我担心注销后,在fiddler的帮助下,身份验证cookie和会话将在服务器上重新验证。这意味着黑客可以使用工具插入垃圾数据来破坏我的应用程序。我如何修改我的注销代码,以便在注销后,服务器不应重新验证来自fiddler的请求。在我的注销表单中,我正在使用以下代码会话;HttpContext.Current.Session.Clear();httpcontext.current.response.cookies.remove(“AUTHCOOKIE”)FormsAuthentication.SignOut();你不能。如果cookie被保存并再次发送回,那么ASP.NET如何知道它以前已被清除?身份验证cookie未链接到会话(即使这样,会话cookie也将被链接到会话)