使用 .NET FormsAuthentication 和持久 cookie 更改密码是否存在安全漏洞?

2024-02-05

好的,这是一个场景:

  1. Bob 登录 mysite.com,该网站使用 .NET 表单身份验证,并勾选“记住我”。
  2. 伊芙偷了鲍勃的笔记本电脑
  3. 鲍勃得到了一台新笔记本电脑,并更改了密码。

现在,Eve 有一台被盗的笔记本电脑,上面存储了一个持久性 cookie,这将使她以 Bob 的身份登录到 mysite.com - 据我所知,这会起作用即使鲍勃更改了密码.

默认情况下,表单身份验证 cookie 不包含 Bob 的密码(无论是纯文本、散列还是以其他方式加密) - 因此 Bob 的密码根本不参与 cookie 身份验证过程,并且上周使用的相同用户名仍然有效今天。

这是一个很容易解决的漏洞 - 只需设置 FormsAuthentication.SetAuthCookie("username:passwordHash") 或其他内容,然后在身份验证处理程序中解密和拆分 cookie - 但我很难相信这个问题存在“开箱即用” ...我错过了什么吗?

EDIT:请注意,我在这里假设“记住我”按钮的目的是让您不必在每次访问网站时输入密码。这适用于 Facebook、Twitter、Gmail 以及我能想到的几乎所有其他网站 - 如果这不是 .NET FormsAuthentication 中“持久 cookie”选项的目的,我会感到非常惊讶。

另外,是的,我接受在every传入请求会产生一定的开销,但实际上,它只比根据用户名从数据库中检索用户稍微昂贵一点,无论如何您可能都会这样做。

EDIT 2:看来至少有一个主要的 .NET 站点 - CodePlex.com - 容易受到此攻击;看http://codeplex.codeplex.com/discussions/350646 http://codeplex.codeplex.com/discussions/350646


也许只接受上次密码重置后发出的 FormsAuth 票证是有意义的。

因此,在 Global.asax AuthenticateRequest 中,从加密票证中提取 FormsAuthenticationTicket.IssueDate,并将其与用户上次重置密码的日期进行比较(当他们重置密码时,您需要将其存储在数据库中)。

如果票证是在该日期之前发出的,则拒绝该票证,不对其进行身份验证并要求他们重新登录。

我自己还没有实现这个,所以我可能在理论中的某个地方遗漏了一个漏洞......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 .NET FormsAuthentication 和持久 cookie 更改密码是否存在安全漏洞? 的相关文章

  • 如何将 Telerik RadGrid 默认设置为编辑模式? (ASP.NET)

    我在 RadGrid 中有一个复选框列 我希望用户能够选中 取消选中它并设置附加属性 但是 当网格呈现时 复选框将被禁用 因为网格不处于 编辑模式 我找到的所有示例都希望我经历一个漫长的过程 选择记录 将其置于编辑模式 更改值 保存值 ya
  • ASP.NET MVC 防伪造令牌不安全

    在没有 ssl 的情况下向服务器发出请求时 我实际上可以看到 MVC3 框架以纯文本形式生成的验证令牌密钥 该密钥存储在名为 RequestVerificationToken Lw 的 cookie 中 在混合安全环境中 实际上可以在向非
  • .net dropdownlist对齐文本

    我正在尝试将 net 下拉列表中的文本向右对齐 使用 CssClass 我可以在 Firefox 中将文本向右对齐 IE 不会将文本右对齐 而是左对齐 我读到 IE 6 不支持这个 这是真的 我使用的是 IE7 但我的大多数用户将使用 IE
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 带有服务总线的 SignalR Azure 云服务

    我使用 SignalR 构建了一个简单的聊天应用程序那里有教程 http www asp net signalr overview getting started tutorial getting started with signalr
  • 如何更改锁屏自定义文本(所有者信息)?

    我写了程序代码 String message This is test Settings System putString context getContentResolver Settings Secure LOCK PATTERN EN
  • 如何检查浏览器的JavaScript是否启用

    我的应用程序依赖于 JavaScript 我想检查客户端浏览器的 JavaScript 是否启用 如果关闭则发出警报消息 其实有一个
  • 删除具有多个主键的 Datalist 行

    我有一个带有 OnDeleteCommand Delete Command 的数据列表 我想要删除具有多个主键的记录 但我不知道如何从 Delete Command 事件访问它 如果我使用 DataKeyField 我只能使用一个键 有什么
  • 简单的 LINQ 和列表错误:WhereListIterator`1[Task]' 键入 'System.Collections.Generic.List`1[Task]'

    我无法理解我的错误 Method public List
  • 在sql server 2008中插入新记录时如何检查数据库中的值是否已存在

    我创建了一个存储过程 用于从表中选择值 如果该值已经存在 那么它将更新该值 但如果不存在 那么它将插入新值 我为此使用了存储过程 如下所示 Create PROCEDURE dbo sp Insert Tid int NULL Quid i
  • 如何为网站创建 RSS feed?

    我开发了一个网络应用程序 现在我想为我的网站创建 Rss 提要 在我的应用程序中 我有一个名为电影新闻的模块 其中包含电影明星的最新新闻 现在我想为该模块创建 RSS 提要 该新闻包含标题和描述 如何为我的应用程序创建 RSS 源 这是我用
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 使用 eval 时不会受到 XSS 威胁

    我正在制作 不是现在 但我仍然对这个感到好奇 一款使用 HTML5 和 JS 的游戏 我想要的是人们可以插入自定义脚本 但要安全 function executeCustomJS code eval code bad 当然这段代码非常糟糕
  • 编译器失败,错误代码-1073741819

    我们遇到以下错误 而且每次都需要重启服务器 The compiler failed with error code 1073741819 此外 ASP Net 工作正常 只有 ASP Net MVC 应用程序无法工作 任何想法 我的错误代码
  • 逆向工程 ASP.NET Web 应用程序

    我有一个 ASP NET Web 应用程序 我没有源代码 该 bin 包含 10 个程序集和一个 compiled 文件 我在 App Code dll 上使用 Reflector 它向我显示了类和命名空间之类的东西 但它太混乱了 有没有什
  • 以编程方式设置 aspnet:MaxHttpCollectionKeys

    在特定网站的一些管理功能中 我正在做一篇特别可怕的帖子 需要一个large要发布的数据量 为了实现这一点 我必须添加 Web config appSetting https stackoverflow com questions 88324
  • ASP.NET MVC区域命名空间问题

    我在我的 asp net mvc 3 解决方案中创建一个名为的新区域admin Visual Studio 自动分配名称空间 MyApp areas admin controllers 我将其更改为MyApp admin controlle
  • 哪些控件触发了 Page.IsValid = false?

    两件事情 是否可以通过 Jquery 设置 Page IsValid Is Valid 属性 以便我不必使用 aspx 验证器 据我了解 IsValid 属性是只读的 当验证器进入时 是否可以通过 Jquery 当然 找出哪些控件导致验证失
  • 密码保护 IIS 7.5 中的 ASP.NET Web 应用程序

    我在 Windows 7 上使用 IIS 7 5 为我的 asp net 网站提供测试服务 为了阻止随意的人查看我的网站 我希望 IIS 在提供任何服务之前需要用户名和密码 我已尝试在应用程序上禁用匿名身份验证并启用 Windows 身份验
  • Gridview 错误:对 Bind 的调用格式不正确

    我有以下 gridview 代码

随机推荐