【问题标题】:Forms auth: User has been changed during session表单身份验证:用户在会话期间已更改
【发布时间】:2011-11-29 13:17:50
【问题描述】:

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

用户“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 的额外检查。

感谢您帮助我们!

【问题讨论】:

  • 你确定是同一个人,你是根据IP还是用户报告这个问题?可以看到办公室/建筑物中的用户来自相同的 IP 地址。
  • 用户报告了这个问题。用户“A”和“B”在不同的办公室工作,拥有不同的 IP。我们在调查时解决了这个问题。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我有几个可能的想法:

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

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

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

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

    编辑:

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

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

    【讨论】:

    • 感谢您的回复!但是更改了用户,而不仅仅是用户名。用户 A 和 B 存在于 DB 中,但 A 获取 B 的会话。
    • 对不起,我误解了这个问题,但我已经编辑了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2018-12-13
    • 1970-01-01
    • 2020-10-06
    • 2012-12-08
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多