无 Cookie 站点地图安全漏洞



我们有一个在 IIS7 中运行的 ASP.Net 网站项目,该项目使用菜单导航的站点地图表现出我以前从未见过的无 cookie 行为。

当无 Cookie 用户登录到站点时,他们会遇到预期的问题,即浏览不包含其会话 ID 的链接,从而导致他们丢失会话上下文。这部分似乎很好理解,尽管我们可以手动处理这个问题,但所有用户都希望出于其他原因启用 cookie(此处的用户群较小),并且提供无 cookie 支持是低优先级。

我们现在能够重现的更令人不安的行为是,当用户在应用程序池回收后访问网站时,如果该用户禁用了 cookie,他们将收到预期的无 cookie URL 和行为,但所有其他启用 cookie 的用户现在将获得站点地图创建的链接,其中包含第一个用户的会话 ID。这意味着无 cookie 的用户 A 登录,启用 cookie 的用户 B 登录,用户 B 点击链接,并且由于该链接包含用户 A 的会话 ID,他们现在实际上处于用户 A 的会话中,可以看到他们的数据等。此行为将一直持续到回收网站。

Web 配置已将 Cookieless 设置为自动检测,应用池回收处于默认回收期 29 小时。

我将开始在解决方案中寻找奇怪的请求处理程序和其他错误的自定义添加,但粗略地看一下并没有让我认为我们看到的除了默认站点地图行为之外的任何东西。

我在这里的问题是:

  • 这是一个已知的错误还是已经记录的东西?
  • 站点地图解析的链接是否以某种方式缓存?
  • 我没有看到对站点地图 URL 的任何编程操作,但有没有办法调试到站点地图的实际 URL 生成,以查看它如何以及为什么在其他用户启用 cookie 的响应中包含无 cookie 会话 ID?

关于如何进一步追踪这一点的任何建议将不胜感激。

一旦我们确认这与站点地图链接有关,它就会缩小我们的搜索范围,我们发现这个"修复:在无 Cookie 模式下 ASP.NET 4 个站点地图提供商 URL 不正确"。

出现此问题的原因是,当导航控件首次绑定数据时,将生成 SiteMapProvider 对象的 URL 表。然后缓存 URL 表,以供将来在以后的请求中使用 - http://support.microsoft.com/kb/2472263

在我们的例子中,我们看到的行为与知识库文章中描述的问题直接相关,应用此修补程序解决了问题。

最新更新