我的应用程序有会话修复漏洞。要修复该漏洞,我将在登录后更改会话ID。
我在不同文件夹Master和Transaction中拥有以下网页。
~/Master/Login.aspx
:验证凭据后,我正在设置
Response.Cookies["ASPFIXATION"].Value ="xyz";
Session["ASPFIXATION"] = "xyz"
并重定向到〜/ Master / Home.aspx
~/Master/Home.aspx
:在此页面中,我使用页面加载事件上的cookie值检查会话值。
string cookie_value = string.Empty;
string session_value = string.Empty;
if (Request.Cookies["ASPFIXATION"] != null)
cookie_value = Request.Cookies["ASPFIXATION"].Value;
if (HttpContext.Current.Session["ASPFIXATION"] != null)
session_value = HttpContext.Current.Session["ASPFIXATION"].ToString();
if (cookie_value != g_SessionFix)
{
if (Request.Cookies["ASP.NET_SessionId"] != null)
{
Response.Cookies["ASP.NET_SessionId"].Value = null;
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddDays(-1);
}
if (Request.Cookies["ASPFIXATION"] != null)
{
Response.Cookies["ASPFIXATION"].Value = null;
Response.Cookies["ASPFIXATION"].Expires = DateTime.Now.AddDays(-1);
}
Response.Redirect("~/Master/Login.aspx", false);
}
此处会话具有值并且已经过验证。
~/Transaction/Report.aspx
:如果我重定向到此页面并且必须在此页面加载中检查相同的会话和cookie值逻辑。但是,此处HttpContext.Current.Session["ASPFIXATION"]
的值为null
,HttpContext.Current.Session.IsNewSession
的值也为true
答案 0 :(得分:0)
尝试在读取值后重新分配值,有时会在从会话中读取后清除值:
if (Request.Cookies["ASPFIXATION"] != null)
{
cookie_value = Request.Cookies["ASPFIXATION"].Value;
Request.Cookies["ASPFIXATION"].Value = cookie_value;
}
if (HttpContext.Current.Session["ASPFIXATION"] != null)
{
session_value = HttpContext.Current.Session["ASPFIXATION"].ToString();
HttpContext.Current.Session["ASPFIXATION"] = session_value;
}
如果它仍然不起作用,那么你还有另外一个选择, 如果您的会话数据不是保密的,那么尝试在查询字符串中传递它,并在页面重定向中检索此值。
Response.Redirect("~/Master/Login.aspx?data=" + session_value +");