【问题标题】:ASP.NET WebForms Authentication Logout, Cookie can still be used to access siteASP.NET WebForms Authentication Logout, Cookie 仍可用于访问站点
【发布时间】:2020-04-22 07:23:32
【问题描述】:

我一直在拼命地在网上搜索这个,但我认为我在理解将用户从 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" />

【问题讨论】:

  • 将您的 cookie 过期时间设置为 DateTime.Now.AddDays(-1d);
  • @EdneyHolder 和删除cookie一样——验证用户的cookie是存在的,如果添加过期,预览验证的cookie仍然存在,理论上可以被黑客拿走
  • 我设置了过期的 cookie,但它似乎仍然没有帮助。我将采用 Aristos 的答案并进行仔细检查。感谢您的支持。

标签: c# asp.net authentication webforms session-cookies


【解决方案1】:

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

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

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


为了增加额外的安全层,并避免他人窃取 cookie:

  • 第一步是仅对 cookie (*) 强制使用 SSL。 &lt;httpCookies httpOnlyCookies="true" requireSSL="true" /&gt;。使用它,你就很难窃取 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 保留在服务器上并仔细检查 - 现在您不这样做了。

【讨论】:

  • 你是对的,我需要仔细检查。这并不理想......我觉得应该有一种更简单的方法来使用 ASP.NET 来做到这一点。感谢您的帮助。
  • @AtLeastTheresToast 开箱即用的解决方案并不容易在 asp.net 上提供,因为您需要一个数据库来存储所有这些。
  • 是的,我正在慢慢弄清楚。让它在本地工作,现在与舞台服务器苦苦挣扎。跛脚。
猜你喜欢
  • 2021-09-10
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2011-09-18
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多