首页 > 解决方案 > ASP.NET WebForms Authentication Logout, Cookie 仍然可以用来访问站点

问题描述

我一直在用头撞墙并在网上搜索此内容,但我认为我在理解将用户从 asp.net webforms 应用程序中注销的整个过程时遇到了问题。问题:我能够登录到我的应用程序并且它使用 cookie,所以我在浏览器中设置了我的 cookie。这是配置表单身份验证部分,

<forms loginUrl="login.aspx" timeout="15" protection="All" name="Domain.MYDOMAIN" path="/" domain="mysite.local" cookieless="UseDeviceProfile"/> 

这是前端控件

<li><asp:LoginStatus ID="LoginStatus1" runat="server" OnLoggedOut="OnLoggedOut" /></li>

在 OnLoggedOut 方法中,我们做这样的事情。

protected void OnLoggedOut(object sender, EventArgs e)
{
    FormsAuthentication.SignOut();
     /* Abandon session object to destroy all session variables */
    HttpContext.Current.Session.Clear();
    HttpContext.Current.Session.Abandon();
    Response.Redirect("~/login.aspx");
}

这将从浏览器中清除 cookie。但是,如果在我这样做之前,我复制了 Domain.MYDOMAIN = "whatever it would be" 的 cookie 名称对值

并将其添加到邮递员电话中,它仍然显示我已登录!非常令人沮丧。当我登录时在此处输入图像描述

我使用上面提到的注销按钮注销,cookie 被删除 在此处输入图像描述

然后我将该 cookie 带到 Postman 并调用登录/默认页面,它显示我仍然登录!!!
在此处输入图像描述

我一直在阅读该 cookie 与“票证”有关,但我不确定如何在服务器端使该票证过期。一旦用户单击注销,我不希望再次使用此 cookie 值来访问页面,即应用程序中的任何页面。任何帮助,将不胜感激!谢谢你!

旁注:我的会话状态设置为 InProc

 <sessionState mode="InProc" />

标签: c#asp.netauthenticationwebformssession-cookies

解决方案


用户使用用户名和密码进行身份验证,然后我们设置一个超时的 cookie,这个 cookie 让他登录。

即使您从一个浏览器中删除了 cookie,如果您仍然拥有它并再次放置它 - 您允许再次登录,因为 cookie 给出了“OK”来执行此操作。

这不仅在 asp.net 上,而且无处不在(微软、谷歌、Facebook)。


要增加额外的安全层,并避免有人窃取 cookie:

  • 第一步是仅对 cookie (*) 强制使用 SSL。<httpCookies httpOnlyCookies="true" requireSSL="true" />. 使用它,你很难窃取 cookie

  • 第二步是注销以将该 cookie 保存在数据库中,然后在每次请求时检查 cookie 是否已注销第三步也是检查 cookie 是否来自相同的浏览器 ID。

因此,您将 cookie 与浏览器数据以及用户按下注销的标志连接起来。

您在 global.asax 上进行检查

protected void Application_BeginRequest(Object sender, EventArgs e)

(*) 第一步:黑客能否窃取用户的网络浏览器 cookie 并使用该名称登录网站?

困难的方法是为数据库添加额外的保护层,并将cookie与我所说的其他用户信息、浏览器ID和一个标志(如果已注销)连接起来。主要思想是将您设置的经过身份验证的cookie保留在服务器上并仔细检查 - 现在您不这样做。


推荐阅读