lan*_*nce 5 asp.net session response.redirect volatile risk-analysis
代码:
Session["foo"] = "bar";
Response.Redirect("foo.aspx");
Run Code Online (Sandbox Code Playgroud)
问题:
当foo.aspx从会话中读取"foo"时,它就不存在了.该会议是存在的,但有一个为"富"没有价值.
我在生产环境中间歇地观察到了这一点.但我不是要问一个关于Response.Redirect()的问题.
说明:
Bertrand Le Roy解释说(粗体是我的):
现在,重定向的作用是向客户端发送一个特殊的标头,以便它向服务器请求与其等待的页面不同的页面.服务器端,在发送此标头后,重定向结束响应. 这是一件非常暴力的事情. Response.End实际上使用ThreadAbortException停止页面的执行.这里真正发生的是 会话令牌在战斗中丢失.
我的看法是Response.Redirect()可能会因为结束线程而变得严厉.这可能会威胁到我的会话写入,如果他们发生太接近那种笨手笨脚的话.
问题:
那么ASP.NET会话管理会让它变得如此容易受到攻击?在会话写入行"完成"之前,Response.Redirect()代码行不会开始执行 - 如何对会话写入构成这样的威胁?
在下一行代码执行之前,会话写入没有"完成"?是否存在会话写入类似(就好像它们从未发生过)丢失的其他场景?
在测试了几种替代方案(Response.Redirect(..., false)、Server.Transfer() 和其他我现在不记得的“解决方案”)之后,我们只找到了这个问题的一个可靠答案。
将会话状态从 InProc 移动到 SqlServer 有效地从我们的系统中消除了这种行为,使 Response.Redirect(...) 完全可靠。如果进一
归档时间: |
|
查看次数: |
667 次 |
最近记录: |