表单身份验证:用户在会话期间已更改

时间:2011-11-29 13:17:51

标签: asp.net-mvc iis-7 forms-authentication

我们遇到了一个奇怪的案例。

用户“A”登录我们的网络系统(ASP.NET MVC,Forms Auth),工作了一段时间,然后他的用户名改为“B”

IIS日志:

  

2011-11-29 05:59:26 GET / PlacementOrder / - 80 userA@mail.com   191.114.62.70 Mozilla / 4.0 + 200 0 0 2118 2011-11-29 05:59:26 POST / PlacementOrder / Index_GetData - 80 userB@mail.com 191.114.62.70   Mozilla / 4.0 + 200 0 0 551

这种情况非常关键 - 用户无法看到其他人的数据。

有没有人有任何想法?请!

最后:
我们已经确定它是ASP.NET,IIS或其他任何地方的错误。我们在Application_AuthenticateRequest和AuthCookie.UserData中添加了对IP的额外检查。

感谢您帮助我们!

2 个答案:

答案 0 :(得分:1)

这可能是由于在服务器(或代理)上缓存页面引起的。

方案:
UserB请求页面X,它缓存在服务器上,然后UserA请求页面X,服务器从缓存中传递它,用户名也被缓存。

答案 1 :(得分:0)

我有一些可能的想法:

1。)应用程序提供了用户名更改功能,并且给定用户使用了此功能

2.)给定用户访问数据库并运行一些命令。其中一个命令是更改他/她的用户名

3。)应用程序的测试人员/开发人员更改了给定用户的用户名。

最危险的可能性是第二个。如果是这种情况,问题可能是缓冲区溢出攻击,SQL注入或感染的结果。

编辑:

我明白。那么,用户名是数据库中某个表的字段。用户是您的一个表的一行或更多表的连接行。我的答案中提到的3种可能性仍然存在,还有另一种可能性。

4。)它也可能是应用程序中的一个错误,可能以错误的方式识别用户实体并获得另一个用户。例如,UserID = 1,Name ='John Smith'; UserID = 2,Name ='John Smith'。 UserID = 1和UserID = 2具有相同的名称,但它们是不同的实体。这甚至可能是错误识别的情况。