c# - 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 带到 Postman 并调用登录/默认页面,它显示我仍然登录!!!
我一直在阅读该 cookie 与“票证”有关,但我不确定如何在服务器端使该票证过期。一旦用户单击注销,我不希望再次使用此 cookie 值来访问页面,即应用程序中的任何页面。任何帮助,将不胜感激!谢谢你!
旁注:我的会话状态设置为 InProc
<sessionState mode="InProc" />
解决方案
用户使用用户名和密码进行身份验证,然后我们设置一个超时的 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保留在服务器上并仔细检查 - 现在您不这样做。
推荐阅读
- swift - 使用“userNotificationCenter willPresent notification: UNNotification”我的电脑速度非常慢
- c++ - 在 C++ 中实现字母表
- blazor - Blazor Webassembly RDLC 报告查看器
- excel - 基于最大值和红色新单元格的条件格式
- javascript - 我怎样才能使这个功能?(相同的结果检查)
- python - 当你在 Python 中导入一个库时,你从哪里导入它?
- javascript - 无法在 Reactjs SSR 中使用 CSS
- stripe-payments - Stripe:订阅更新时没有 webhook 事件
- c# - 用没有 It.isany 的谓词模拟
- php - ACF wordpress 模变量