ASP.NET WebForms 身份验证注销,Cookie 仍可用于访问站点

ASP.NET WebForms Authentication Logout, Cookie can still be used to access site

我一直在用头撞墙并在网上搜索这个,但我认为我在理解将用户从 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 = "what ever it would be"

的 cookie 名称对值

并将其添加到邮递员电话中,它仍然显示我已登录!非常令人沮丧。 当我登录时

我使用上面提到的注销按钮注销并且删除了 cookie

然后我将那个 cookie 带到 Postman 并调用登陆/默认页面,它显示我仍然登录!!!

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

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

 <sessionState mode="InProc" />

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

即使您从一个浏览器中删除了 cookie,如果您仍然拥有它并重新放置它 – 您允许再次登录,因为 cookie 给出了“确定”的权限。

这不仅在 asp.net 上而且无处不在(Microsoft、google、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)

(*) 第一步:Can some hacker steal a web browser cookie from a user and login with that name on a web site?

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