ASP.NET WebForms Authentication Logout, Cookie 仍可用于访问站点
Posted
技术标签:
【中文标题】ASP.NET WebForms Authentication Logout, Cookie 仍可用于访问站点【英文标题】:ASP.NET WebForms Authentication Logout, Cookie can still be used to access site 【发布时间】: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 的答案并进行仔细检查。感谢您的支持。 【参考方案1】:用户使用用户名和密码进行身份验证,然后我们设置一个超时的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)
(*) 第一步: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 上提供,因为您需要一个数据库来存储所有这些。 是的,我正在慢慢弄清楚。让它在本地工作,现在与舞台服务器苦苦挣扎。跛脚。以上是关于ASP.NET WebForms Authentication Logout, Cookie 仍可用于访问站点的主要内容,如果未能解决你的问题,请参考以下文章
下周要搞大事情(ASP.NET Core & WebForms)!
ASP.NET WebForms FriendlyUrlSegments 不包含采用 0 个参数的构造函数
在 ASP.NET 4.5 WebForms 中通过 bundle.config 与 BundleConfig.cs 捆绑资源