【发布时间】:2011-01-17 02:11:20
【问题描述】:
代码:
Session["foo"] = "bar";
Response.Redirect("foo.aspx");
问题:
当 foo.aspx 从会话中读取“foo”时,它并不存在。 session 存在,但“foo”没有任何价值。
我在我们的生产环境中间歇性地观察到了这种情况。但我不是在这里问a question about Response.Redirect()。
解释:
Bertrand Le Roy 解释(粗体字是我的):
现在,重定向所做的是发送一个 客户端的特殊标头,以便 它要求服务器提供不同的 页面比它正在等待的页面。 服务器端,发送后 标头,重定向结束响应。 这是一件非常暴力的事情。 Response.End 实际上停止了 执行页面,无论它在哪里 使用 ThreadAbortException。什么 真正发生在这里的是 会话令牌在战斗中丢失。
我的收获是 Response.Redirect() 可以通过结束线程来处理。如果它们发生得太接近那种严厉,那可能会威胁到我的会话写作。
问题:
ASP.NET 会话管理如何使其如此容易受到攻击? Response.Redirect() 代码行在会话写入行“完成”之前不会开始执行——它怎么会对我的会话写入造成如此大的威胁?
在下一行代码执行之前会话写入没有“完成”怎么办?是否存在其他会话写入同样丢失(好像从未发生过)的情况?
【问题讨论】:
标签: asp.net session volatile response.redirect risk-analysis