使用StateServer的ASP.NET会话混合(SCARY!)

时间:2009-10-29 20:17:19

标签: asp.net security session iis-6 stateserver

我们在会话中存储两个对象。不知何故,来自另一个用户的一个对象被加载到另一个用户的会话中。用户应该无法访问这些特定数据,一旦他们看到它就知道出现了一些非常错误的信息。

我们有可视化证明提供给他的数据,并且当然除非会议混淆,否则它无法发生。这是一个非常可怕的情况,我们无法弄清楚(我们无法重现它)。对我们来说唯一的答案是责怪ASP.NET StateServer混合会话变量,这是完全不可接受的,并使我们处于不利的位置。

我们的应用程序是在带有IIS6的Windows Server 2003上运行的ASP.NET 2.0应用程序,使用StateServer cookieless="false"会话模式和FormsAuthentication。

还有其他人有这个问题吗?我们如何解决它?

6 个答案:

答案 0 :(得分:13)

我们在之前的公司遇到过这个问题并花了3个星期来调试它。 ASP.NET正在为用户提供其他人的会话状态。在调试环境中复制真的不可能。

我们发现它时的修复只是web.config中的内容。我不完全记得它,所以我花了一些时间谷歌搜索。我认为这个问题与输出缓存有关。在“会话和输出缓存”下查看本文。

http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazineJuly2006en-us.chm(这篇文章的标题是通过避免这些10个常见的ASP.NET陷阱使网站顺利运行由Jeff Prosise在2006年7月版的MSDN杂志上发表)

如果这听起来像你的场景,那么修复可能只是禁用web.config中的enableKernelOutputCache选项。

祝你好运。

答案 1 :(得分:5)

首先查找自己代码中的错误 - 这是迄今为止最可能的解释。例如。使用静态字段或其他共享内存(如ASP.NET缓存)来获取特定于用户的数据。

答案 2 :(得分:3)

答案 3 :(得分:0)

它发生了多少次?您是否使用浏览器返回检查用户或使用会话ID发送彼此链接?

检查状态服务器错误的一种方法是切换到另一个会话管理器,如果可以或使用SQL Server,则回退到进程中,但最好找到一种方法来重现错误,这样你就可以测试它。

答案 4 :(得分:0)

两个交叉用户是否都使用相同的缓存代理?如果是这样,那么如果URL匹配,则一个用户可能会看到为另一个用户缓存的数据,尤其是在代理表现不佳的情况下。

这不是Google Web Accelerator项目的主要问题(现已停止使用)吗?

答案 5 :(得分:0)

有这个问题,结果是局部视图上的OutputCache属性。